Java Map的遍历与排序

Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。

  • TreeMap:基于红黑树实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator 进行排序。

  • HashMap 的值是没有顺序的,它是按照keyHashCode 来实现的,对于这个无序的HashMap 的排序参照TreeMapvalue 排序。

  • LinkedHashMap 是HashMap 的一个子类,它的输出顺序与输入顺序相同。

  • Map.Entry 返回Collections 视图。

Map的遍历

  • 方法一:键找值,通过元素的键,获取对应的值。

    // 创建一个HashMap HashMap<String, Integer> hashMap=newHashMap<>(); 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的排序

  • Mapkey 进行排序

    1key 升序

    // 创建一个TreeMap,它的Key默认升序 TreeMap<String, Integer> treeMap=newTreeMap<>(); 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

    2key 降序

    // key降序,创建TreeMap时给一个比较器参数 TreeMap<String, Integer> treeMap1=newTreeMap<>(newComparator<String>(){@Overridepublicintcompare(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
  • Mapvalue 进行排序

    1value 升序

    // 对TreeMap的value排序,升序// 将Map的entry放入List中,然后排序 ArrayList<Map.Entry<String, Integer>> list=newArrayList<>(treeMap.entrySet()); Collections.sort(list,newComparator<Map.Entry<String, Integer>>(){@Overridepublicintcompare(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

    2value 降序

    // 对TreeMap的value排序,降序 ArrayList<Map.Entry<String, Integer>> list1=newArrayList<>(treeMap.entrySet()); Collections.sort(list1,newComparator<Map.Entry<String, Integer>>(){@Overridepublicintcompare(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