Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。
-
TreeMap:基于红黑树实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的
Comparator
进行排序。 -
HashMap 的值是没有顺序的,它是按照
key
的HashCode
来实现的,对于这个无序的HashMap
的排序参照TreeMap
的value
排序。 -
LinkedHashMap 是
HashMap
的一个子类,它的输出顺序与输入顺序相同。 -
Map.Entry 返回
Collections
视图。
Map的遍历
-
方法一:键找值,通过元素的键,获取对应的值。
// 创建一个HashMap HashMap<String, Integer> hashMap = new HashMap<>(); hashMap.put("lihaogn", 8); hashMap.put("zhangsan", 7); hashMap.put("wanger", 9); // 遍历map方式一 Set<String> keySet = hashMap.keySet(); Iterator<String> iterator = keySet.iterator(); while (iterator.hasNext()) { String key = iterator.next(); Integer value = hashMap.get(key); System.out.println(key + ":" + value); } // lihaogn:8 // zhangsan:7 // wanger:9
-
方式二:键值对方式,通过集合中每个键值对对象,获取键值对对象中的键与值。
// 遍历map方式二 for (Map.Entry<String, Integer> entry : hashMap.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + ":" + value); } // lihaogn:8 // zhangsan:7 // wanger:9
Map的排序
-
对
Map
的key
进行排序1
key
升序// 创建一个TreeMap,它的Key默认升序 TreeMap<String, Integer> treeMap = new TreeMap<>(); treeMap.put("lihaogn", 5); treeMap.put("zhangsan", 3); treeMap.put("wanger", 6); for (Map.Entry<String, Integer> entry : treeMap.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + ":" + value); } // lihaogn:5 // wanger:6 // zhangsan:3
2
key
降序// key降序,创建TreeMap时给一个比较器参数 TreeMap<String, Integer> treeMap1 = new TreeMap<>( new Comparator<String>() { @Override public int compare(String o1, String o2) { return o2.compareTo(o1); } } ); treeMap1.put("lihaogn", 5); treeMap1.put("zhangsan", 3); treeMap1.put("wanger", 6); for (Map.Entry<String, Integer> entry : treeMap1.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + ":" + value); } // zhangsan:3 // wanger:6 // lihaogn:5
-
对
Map
的value
进行排序1
value
升序// 对TreeMap的value排序,升序 // 将Map的entry放入List中,然后排序 ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>(treeMap.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for (Map.Entry<String, Integer> entry : list) { System.out.println(entry.getKey() + ":" + entry.getValue()); } // zhangsan:3 // lihaogn:5 // wanger:6
2
value
降序// 对TreeMap的value排序,降序 ArrayList<Map.Entry<String, Integer>> list1 = new ArrayList<>(treeMap.entrySet()); Collections.sort(list1, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o2.getValue().compareTo(o1.getValue()); } }); for (Map.Entry<String, Integer> entry : list1) { System.out.println(entry.getKey() + ":" + entry.getValue()); } // wanger:6 // lihaogn:5 // zhangsan:3