集合类概述3
Map集合
map集合没有继承Collection接口,其提供的是key到value的映射。map中不能包含相同的key,每个key只能映射一个value。key还决定了存储对象在映射中的位置,但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值,散列值通常做一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。map集合包括map接口的所有实现类。
map接口
map接口提供了将key映射到值得对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。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集合
public class Map集合 { public static void main(String[] args) { Map<String ,String>map = new HashMap<>();//创建Map实例 map.put("01","李同学");//向集合中添加对象 map.put("02","张同学"); map.put("03","周同学"); Set<String>set = map.keySet();//构建Map集合中key对象的集合 Iterator<String> iterator = set.iterator();//创建集和迭代器 System.out.println("key集合中的元素"); while (iterator.hasNext()){ System.out.println(iterator.next());//遍历集合 } Collection<String>collection = map.values();//构建map集合中所有values值集合 iterator = collection.iterator(); System.out.println("values集合中的元素"); while (iterator.hasNext()){//遍历集合 System.out.println(iterator.next()); } } }
结果:
Map接口的实现类
Map接口常用的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,因为HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内的映射关系进行快速查找;而TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象也存在一定的顺序,应该使用TreeMap类实现Map集合。
HashMap类是基于哈希表的Map接口的实现此实现提供所有可选的映射操作,并允许使用null值和null键,但必须报证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是它不保证顺序恒久不变
TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap类比HashMap类性能差
由于TreeMap类实现的Map集合中的映射关系是根据键值对象按照一定的顺序排列的,因此不允许键值对象时null
可以通过HashMap类创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例
public class MapTest { public static void main(String[] args) { Map<String,String>map = new HashMap<>();//由hashMap实现的Map对象 Emp emp = new Emp("007","零零发"); Emp emp1 = new Emp("008","零零发"); Emp emp2 = new Emp("009","零零九"); map.put(emp.getE_id(),emp.getE_name());//创建Emp对象 map.put(emp1.getE_id(),emp.getE_name()); map.put(emp2.getE_id(),emp2.getE_name()); Set<String>set = map.keySet();//获取Map集合中的key对象集合 Iterator<String>iterator = set.iterator(); System.out.println("HashMap类实现的map集合,无序:"); while (iterator.hasNext()){//遍历集合 String string = iterator.next(); String name = map.get(string); System.out.println(string+""+name); } TreeMap<String,String>treeMap = new TreeMap<>();//创建TreeMap集合 treeMap.putAll(map);//向集合中添加元素 Iterator<String>iterator1 = treeMap.keySet().iterator(); System.out.println("TreeMap类实现的map集合,键对象升序:"); while (iterator1.hasNext()){//遍历TreeMap集合对象 String string = iterator1.next();//获取集合中的所有key对象 String name = treeMap.get(string);//获取集合中的所有values值 System.out.println(string+""+name); } } }
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 getE_id() { return e_id; } public void setE_id(String e_id) { this.e_id = e_id; } public String getE_name() { return e_name; } public void setE_name(String e_name) { this.e_name = e_name; } }