Java集合——Map——Hashtable、LinkedHashMap、HashMap、TreeMap的差异

前言:特别注意,Map不是Collection接口的实现或子类,而是一个独立的接口,Map接口的实现有:HashtableLinkedHashMapHashMapTreeMap

HashMap:

性质:最常用的Map,父类是AbstractMap,根据keyHashCode值来存储数据,根据key可以直接获取它的value,最多允许一条记录的key值为null(多条会覆盖),允许多条记录的value值为null。

优点:访问速度快。

缺点:无序,不同步,线程不安全。

Hashtable:

性质:HashMap类似,其父类是Dictionary,不同的是:keyvalue的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写 Hashtable,因此也导致了Hashtale在写入时会比较慢。

优点:同步,线程安全。

缺点:无序,效率低。

TreeMap:

性质:能够把保存的记录根据key值排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null

优点:有序。

缺点: 不同步,线程不安全。

LinkedHashMap

性质:保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢。keyvalue均允许为null

优点:有序,FIFO

缺点: 不同步,线程不安全。

样例:

import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.TreeMap;

public class MapUtil {
	/**
	 * test
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		HashMap hashMap = new HashMap();
		Hashtable hashTable = new Hashtable();
		TreeMap treeMap = new TreeMap();
		LinkedHashMap linkMap = new LinkedHashMap();
		String[][] strs = { { "abd", "abd" }, { "abc", "abc" },
				{ "abac", "abac" }, { "bcd", "bcd" }, { "bce", "bce" },
				{ "bac", "bac" }, { "def", "def" }, { "dea", "dea" },
				{ "efghddd", "efghddd" }, { "efghdda", "efghdda" } };
		for (String[] s : strs) {
			hashMap.put(s[0], s[1]);
			hashTable.put(s[0], s[1]);
			treeMap.put(s[0], s[1]);
			linkMap.put(s[0], s[1]);
		}

		System.out.println("HashMap 无序:\n    " + hashMap.values());
		System.out.println("Hashtable 无序:\n    " + hashTable.values());
		System.out.println("TreeMap 有序:\n    " + treeMap.values());
		System.out.println("LinkedHashMap FIFO:\n    " + linkMap.values());
	}
}


输出:
HashMap 无序:
    [dea, abc, abd, def, efghddd, abac, efghdda, bcd, bac, bce]
Hashtable 无序:
    [def, bac, dea, bce, bcd, abd, efghddd, abc, efghdda, abac]
TreeMap 有序:
    [abac, abc, abd, bac, bcd, bce, dea, def, efghdda, efghddd]
LinkedHashMap FIFO:
    [abd, abc, abac, bcd, bce, bac, def, dea, efghddd, efghdda]

 

 

你可能感兴趣的:(Java集合——Map——Hashtable、LinkedHashMap、HashMap、TreeMap的差异)