Java几种Map:
1. TreeMap。TreeMap实现SortMap,底层是红黑树实现,可以快速查询,但是每次插入和删除需要花费时间,因为TreeMap是根据键值排好序的; 2. HashMap。HashMap底层是Hash表实现,HashMap允许一个键值为null,允许多个值为null,插入、删除和查找元素,HashMap是最好的选择,HashMap遍历速度和容量有关; 3. LinkedHashMap。LinkedHashMap是HashMap子类,保存了记录插入的顺序,LinkedHashMap遍历速度和实际数据有关; 4. WeakHashMap。WeakHashMap弱引用HashMap,当键值除了自身引用外没有其他地方时,调用系统gc并访问键值时,WeakHashMap就会抛弃这个元素; 5. ConcurrentHashMap。ConcurrentHashMap支持线程同步(锁住一个桶); 6. Hashtable。Hashtable继承Dictionary,支持线程同步(锁住整张表),不允许记录的键值和值为null,hashcode直接使用object的hashcode。对比: TreeMap和HashMap相比,TreeMap实现了排序,当对顺序有要求是可以使用TreeMap,但是TreeMap在插入、删除和查询上性能都不如HashMap,所以没有顺序要求时,优先考虑使用HashMap。 HashMap和LinkedHashMap对比,一般情况下HashMap遍历速度比LinkedHashMap快,当HashMap容量很大实际数据很少时,LinkedHashMap可能比HashMap快,因为容量会影响HashMap的遍历速度,而LinkedHashMap遍历只受实际数据影响。 ConcurrentHashMap和Hashtable。ConcurrentHashMap和Hashtable都支持线程安全,但是Hashtable是用synchronized锁住整张表,ConcurrentHashMap是分段锁之锁住一个桶,所以ConcurrentHashMap的性能要比Hashtable高。