HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
HashMap 非线程安全 TreeMap 非线程安全
线程安全
在Java里,线程安全一般体现在两个方面:
1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable
(后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。
2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。
1.AbstractMap抽象类和SortedMap接口
顾名思义,HashMap 就是于基于 Hash 的算法,多数情况下它不是有序的 (这里是指Ordered,不是 Sorted).
TreeMap 则是按 Tree 的算法排过序的(是 Sorted,不是 Ordered)。
当你需要有序的时候,可以用 LinkedHashMap 或 TreeMap。
当你需要自动排序的时候,就用 TreeMap。
不需要排序也不需要有序,可以用 HashMap。LinkedHashMap 总体上来说就像 LinkedList 和 ArrayList 区别一样,链表和数组相比就是不适合随机访问,但顺序迭代就没有多大差别。