java中的Map接口

Map接口

Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。Map集合中允许值对象为null,而且没有个数限制。Map接口中同样提供了集合的常用方法,除此之外还包括如下所示的常用方法。

1.Map接口中的常用方法及实例

方法 功能描述
put(K key, V value) 向集合中添加指定的key与value的映射关系
containsKey(Object key) 如果此映射包含指定key的映射关系,则返回true
containsValue(Object value) 如果此映射将一个或多个key映射到指定值,则返回true
get(Object key) 如果存在指定的key对象,则返回该对象对应的值,否则返回null
keySet() 返回该集合中的所有key对象形成的Set集合
values() 返回该集合中所有值对象形成的Collection集合

下面通过实例介绍Map接口中某些方法的使用。
创建类UpdateStu,在主方法中创建Map集合,并获取Map集合中所有key对象的集合和所有values值的集合,最后遍历集合。

public class UpdateStu{
	public static void main(String[] args){
		//创建Map实例
		Map<String,String> map = new HashMap<>();
		//向Map中添加对象
		map.put("01","李同学");
		map.put("02","魏同学");
		//构建Map集合中所有key对象的集合
		Set<String> set = map.keySet();
		//创建集合迭代器
		Iterator<String> it = set.iterator();
		System.out.println("key集合中的元素:");
		//遍历集合
		while(it.hasNext()){
			System.out.println(it.next());
		}
		/**
		key集合中的元素:
		01
		02
		*/
		//构建Map集合中所有values值的集合
		Collection<String> coll = map.values();
		it = coll.iterator();
		System.out.println("values集合中的元素:");
		//遍历集合
		while(it.hasNext()){
			System.out.println(it.next());
		}
		/**
		values集合中的元素:
		李同学
		魏同学
		*/
	}
}

2.Map接口的实现类

Map接口常用的实现类有HashMap和TreeMap。HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速查找;而TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象也存在一定的顺序,应该使用TreeMap类实现Map集合

  • HashMap类基于哈希表的Map接口实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
  • TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap类比HashMap类性能稍差。由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是null。TreeMap treemap.putAll(Map m)方法是将所有键值对从Map m复制到另一个映射 treemap。

可以通过HashMap类创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例。

例如:通过HashMap类实例化Map集合,并遍历该Map集合,然后创建TreeMap实例实现将集合中的元素顺序输出。

(1)首先创建Emp类,代码如下:

public class Emp{
	private String e_id;
	private String e_name;
	public Emp(String e_id, String e_name){
		this.e_id = e_id;
		this.e_name = e_name;
	}
	public String getEId(){
		return e_id;
	}
	public void setEId(e_id){
		this.e_id = e_id;
	}
	public String getEName(){
		return e_name;
	}
	public void setEName(e_name){
		this.e_name = e_name;
	}
}

(2)创建一个用于测试的主类。首先新建一个Map集合,并添加集合对象。分别遍历由HashMap类与TreeMap类实现的Map集合,观察两者的不同点。关键代码如下:

public class MapText{
	public static void main(String[] args){
		Map<String,String> map = new HashMap<>();
		
		Emp emp = new Emp("351","张三");
		Emp emp2 = new Emp("512","李四");
		Emp emp3 = new Emp("853","王一");
		Emp emp4 = new Emp("125","赵六");
		Emp emp5 = new Emp("341","黄七");
		
		map.put(emp4.getEId(),emp4.getEName());
		map.put(emp5.getEId(),emp4.getEName());
		map.put(emp.getEId(),emp4.getEName());
		map.put(emp2.getEId(),emp4.getEName());
		map.put(emp3.getEId(),emp4.getEName());
		
		//获取Map集合中的key对象集合
		Set<String> set = map.keySet();
		Iterator<String> it = set.iterator();
		System.out.println("HashMap类实现的Map集合,无序:");
		while(it.hasNext()){
			String str = (String) it.next();
			String name = (String) map.get(str);
			System.out.println(str +" "+ name);
			/**
			HashMap类实现的Map集合,无序:
			341 黄七
			125 赵六
			512 李四
			853 王一
			351 张三
			*/
		}
		TreeMap<String,String> treemap = new TreeMap<>();
		//将映射map保存在此treemap中
		treemap.putAll(map);
		Iterator<String> iter = treemap.keySet().iterator
		System.out.println("TreeMap类实现的Map集合,键对象升序:");
		while(iter.hasNext()){
			String str = (String) iter.next();
			String name = (String) map.get(str);
			System.out.println(str +" "+ name);
			/**
			TreeMap类实现的Map集合,键对象升序:
			125 赵六
			341 黄七
			351 张三
			512 李四
			853 王一
			*/
		}
	}
}

你可能感兴趣的:(java基础知识,java,开发语言)