【深入Java基础】HashMap高级用法(一):排序

您所在的位置:网站首页 hashmap的排序 【深入Java基础】HashMap高级用法(一):排序

【深入Java基础】HashMap高级用法(一):排序

2024-07-10 15:35| 来源: 网络整理| 查看: 265

HashMap高级用法(一):排序

根据key排序

HashMap是无序的,我们可以根据key进行升序或降序。

1.利用List和Collections来实现排序

先获取HashMap的keySet,然后将keySet放入List,在由Collections的sort方法进行排序。

HashMap hashMap = new HashMap(); hashMap.put(400,"dd"); hashMap.put(3,"cc"); hashMap.put(2,"bb"); hashMap.put(1,"aa"); System.out.println(hashMap); //将keySet放入list ArrayList list= new ArrayList(hashMap.keySet()); //调用sort方法并重写比较器进行升/降序 Collections.sort(list, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o1>o2?1:-1; } }); Iterator iterator = list.iterator(); //迭代排序后的key的list while ((iterator.hasNext())){ Integer key = iterator.next(); String value = hashMap.get(key); System.out.print(key+"="+value+","); } System.out.println();

2.与第一种方法类似,不过是将entrySet放入list后在sort。比较器里取得entrySet的key后在比较,本质不变。

3.利用TreeMap并重写排序compare排序

TreeMap是SortedMap基于红黑树的实现,日后在论。

System.out.println(hashMap);//借用上边的hashMap TreeMap treeMap = new TreeMap(new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o1>o2?1:-1; } }); treeMap.putAll(hashMap); System.out.println(treeMap);

根据value排序

和根据key排序一样,不过是将比较器的比较内容改为比较value的大小。

ArrayList list = new ArrayList(hashMap.entrySet()); Collections.sort(list, new Comparator() { @Override public int compare(Map.Entry o1, Map.Entry o2) { return o1.getValue().compareTo(o2.getValue());//升序,前边加负号变为降序 } }); Iterator iterator = list.iterator(); for(Map.Entry m : list){ System.out.println(m.getKey()+"="+m.getValue()); }

其中排序部分代码:

Collections.sort(list, new Comparator() { @Override public int compare(Map.Entry o1, Map.Entry o2) { return o1.getValue().compareTo(o2.getValue());//升序,前边加负号变为降序 } });

可以用lambda表达式简写为:

Collections.sort(list, (o1, o2) -> { return o1.getValue().compareTo(o2.getValue());//升序,前边加负号变为降序 });

还可以更简单的写为 :

Collections.sort(list, Comparator.comparing(Map.Entry::getValue));


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3