1、HashMap无顺序,而TreeMap的输出自然有序。
HashMap
HashMap 基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()]
TreeMap
TreeMap 基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。
Map<String, String> books1 = new HashMap<>();
books1.put("bob", "books");
books1.put("c", "concurrent");
books1.put("a", "a lock");
Map<String, String> books2 = new TreeMap<>();
books2.put("bob", "books");
books2.put("c", "concurrent");
books2.put("a", "a lock");
Map<Integer, Integer> books3 = new HashMap<>();
books3.put(1, 6);
books3.put(5, 4);
books3.put(7, 66);
books3.put(43, 19);
books3.put(9, 7);
books3.put(19, 7);
Map<Integer, Integer> books4 = new TreeMap<>();
books4.put(1, 6);
books4.put(5, 4);
books4.put(7, 66);
books4.put(43, 19);
books4.put(9, 7);
books4.put(19, 7);
System.out.println(books1);
System.out.println(books2);
System.out.println(books3);
System.out.println(books4);
{a=a lock, c=concurrent, bob=books}
{a=a lock, bob=books, c=concurrent}
{1=6, 19=7, 5=4, 7=66, 9=7, 43=19}
{1=6, 5=4, 7=66, 9=7, 19=7, 43=19}
结论
如果你需要得到一个有序的结果时就应该使用TreeMap(因为HashMap中元素的排列顺序是不固定的)。除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。
2、HashMap 和 TreeMap 都是非线程安全
3、TreeMap中默认是按照升序进行排序的,如何让他降序
通过自定义的比较器来实现 -----定义一个比较器类,实现Comparator接口,重写compare方法,有两个参数,这两个参数通过调用compareTo进行比较。
参考文献:https://www.cnblogs.com/javazhiyin/p/11652526.html