【深入Java基础】HashMap高级用法(一):排序
2018-01-29 16:06
483 查看
HashMap高级用法(一):排序
根据key排序HashMap是无序的,我们可以根据key进行升序或降序。
1.利用List和Collections来实现排序
先获取HashMap的keySet,然后将keySet放入List,在由Collections的sort方法进行排序。
HashMap<Integer,String> 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<Integer> list= new ArrayList<>(hashMap.keySet()); //调用sort方法并重写比较器进行升/降序 Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1>o2?1:-1; } }); Iterator<Integer> 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<Integer,String> treeMap = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1>o2?1:-1; } }); treeMap.putAll(hashMap); System.out.println(treeMap);
根据value排序
和根据key排序一样,不过是将比较器的比较内容改为比较value的大小。
ArrayList<Map.Entry<Integer,String>> list = new ArrayList<>(hashMap.entrySet()); Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() { @Override public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) { return o1.getValue().compareTo(o2.getValue());//升序,前边加负号变为降序 } }); Iterator<Map.Entry<Integer,String>> iterator = list.iterator(); for(Map.Entry<Integer,String> m : list){ System.out.println(m.getKey()+"="+m.getValue()); }
其中排序部分代码:
Collections.sort(list, new Comparator<Map.Entry c008 <Integer, String>>() { @Override public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> 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));
相关文章推荐
- 【深入Java基础】HashMap的高级用法(二):同步
- 【深入Java基础】HashMap的基本用法
- Java中的排序——高级用法
- 黑马程序员——高新技术---Java基础-常用类-排序,Arrays高级数组,Integer类
- 【深入Java基础】HashMap总结
- 【深入Java基础】HashMap源码分析
- Java中的排序——高级用法
- JAVA基础再回首(十一)——数组高级(冒泡排序和选择排序)、Arrays类、基本类型包装类、Integer类
- (java基础知识)HashMap排序,Comparator接口详解
- Java基础——Collections.sort的两种用法排序详解
- 【深入Java基础】ArrayList、LinkedList和Vector的用法与区别
- Java 枚举类型的基础和高级用法
- 深入Java基础(四)--哈希表(1)HashMap应用及源码详解
- 【深入Java基础】HashMap源码分析(二)
- 【Java基础】深入HashMap
- java基础:HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
- (java基础知识)HashMap排序,Comparator接口详解
- Java语言深入:深入研究Java equals方法,equals,==,equals用法
- [基础回顾-JAVA类集框架篇] 之 集合排序Comparable与Comparator(下)
- [基础回顾-JAVA类集框架篇] 之 集合排序Comparable与Comparator(中)