Map介绍
Java Map常见的有:HashMap,TreeMap,LinkedHashMap。
HashMap是最常用的Map,HashMap是:数组+链表+红黑树(JDK1.8增加了红黑树部分)的数据结构,如下所示:
在Java Map集合框架中,除了HashMap以外,TreeMap也是常用到的Java集合对象。
TreeMap底层通过红黑树(Red-Black tree)实现,是一种平衡二叉树。
TreeMap默认是按升序排序,也可以指定排序的比较器,遍历TreeMap时,得到的记录是排过序的。
LinkedHashMap继承了HashMap类,它的多种操作都是建立在HashMap操作的基础上的,只是在原来的单链表的基础上改成了双向链表。
TreeMap排序
TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。
如下所示:
public static void keyUpSort() { // 默认情况,TreeMap按key升序排序 Map<String, Integer> map = new TreeMap<String, Integer>(); map.put("acb1", 5); map.put("bac1", 3); map.put("bca1", 20); map.put("cab1", 80); map.put("cba1", 1); map.put("abc1", 10); map.put("abc2", 12); // 默认情况下,TreeMap对key进行升序排序 System.out.println("------------正常情况,TreeMap按key升序排序--------------------"); for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }
HashMap排序
HashMap本身是没有顺序的,不能直接对其进行排序
要排序只能先转成list然后对应list排序后,再转成LinkedHasHMap
这样做排序完全由自己定义,既可以多key排序也可以多value排序
private static void sortMapValue(){
Map<String,String> map =new HashMap<>();
map.put("a","2");
map.put("c","5");
map.put("d","6");
map.put("b","1");
List<Map.Entry<String,String>> lstEntry=new ArrayList<>(map.entrySet());
Collections.sort(lstEntry,((o1, o2) -> {
return o1.getValue().compareTo(o2.getValue());
}));
lstEntry.forEach(o->{
System.out.println(o.getKey()+":"+o.getValue());
});
//如果一定要返回一个map,就new一个LinkedHashMap,将list中所有值依次put进去就可以
/*LinkedHashMap<String,String> linkedHashMap=new LinkedHashMap<>();
lstEntry.forEach(o->{
linkedHashMap.put(o.getKey(),o.getValue());
});*/
}
输出结果
b:1
a:2
c:5
d:6
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》