Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。
Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。Map接口中同样提供了集合的常用方法
获取Map集合中的所有key对象集合和所有values值集合,最后遍历集合。
import java.util.*; public class UpdateStu { public static void main(String[] args) { Map<String,String> map = new HashMap<>(); // 创建Map实例 map.put("01", "李同学"); // 向集合中添加对象 map.put("02", "魏同学"); Set<String> set = map.keySet(); // 构建Map集合中所有key对象的集合 Iterator<String> it = set.iterator(); // 创建集合迭代器 System.out.println("key集合中的元素:"); while (it.hasNext()) { // 遍历集合 System.out.println(it.next()); } Collection<String> coll = map.values(); // 构建Map集合中所有values值集合 it = coll.iterator(); System.out.println("values集合中的元素:"); while (it.hasNext()) { // 遍历集合 System.out.println(it.next()); } } }
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类实例。
新建一个Map集合,并添加集合对象。分别遍历由HashMap类与TreeMap类实现的Map集合
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class MapText { // 创建类MapText public static void main(String[] args) { // 主方法 Map<String, String> map = new HashMap<>(); // 由HashMap实现的Map对象 Emp emp = new Emp("351", "张三"); // 创建Emp对象 Emp emp2 = new Emp("512", "李四"); Emp emp3 = new Emp("853", "王一"); Emp emp4 = new Emp("125", "赵六"); Emp emp5 = new Emp("341", "黄七"); map.put(emp4.getE_id(), emp4.getE_name()); // 将对象添加到集合中 map.put(emp5.getE_id(), emp5.getE_name()); map.put(emp.getE_id(), emp.getE_name()); map.put(emp2.getE_id(), emp2.getE_name()); map.put(emp3.getE_id(), emp3.getE_name()); Set<String> set = map.keySet(); // 获取Map集合中的key对象集合 Iterator<String> it = set.iterator(); System.out.println("HashMap类实现的Map集合,无序:"); while (it.hasNext()) { // 遍历Map集合 String str = (String) it.next(); String name = (String) map.get(str); System.out.println(str + " " + name); } TreeMap<String, String> treemap = new TreeMap<>(); // 创建TreeMap集合对象 treemap.putAll(map); // 向集合添加对象 Iterator<String> iter = treemap.keySet().iterator(); System.out.println("TreeMap类实现的Map集合,键对象升序:"); while (iter.hasNext()) { // 遍历TreeMap集合对象 String str = (String) iter.next(); // 获取集合中的所有key对象 String name = (String) treemap.get(str); // 获取集合中的所有values值 System.out.println(str + " " + name); } } }
Map集合中允许值对象是null,而且没有个数限制。例如,可通过map.put(“05”,null);语句向集合中添加对象。