LinkedHashMap/HashMap(數(shù)?據(jù)?緩?存?準(zhǔn)?備?)
顧名思義LinkedHashMap是比HashMap多了一個(gè)鏈表的結(jié)構(gòu)。與HashMap相比LinkedHashMap維護(hù)的是一個(gè)具有雙重鏈表的HashMap,LinkedHashMap支持2中排序一種是插入排序,一種是使用排序,最近使用的會(huì)移至尾部例如 M1 M2 M3 M4,使用M3后為 M1 M2 M4 M3了,LinkedHashMap輸出時(shí)其元素是有順序的,而HashMap輸出時(shí)是隨機(jī)的,如果Map映射比較復(fù)雜而又要求高效率的話,最好使用LinkedHashMap,但是多線程訪問的話可能會(huì)造成不同步,所以要用Collections.synchronizedMap來包裝一下,從而實(shí)現(xiàn)同步。其實(shí)現(xiàn)一般為:
Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));
HashMap,LinkedHashMap,TreeMap都屬于Map
Map 主要用于存儲(chǔ)鍵(key)值(value)對(duì),根據(jù)鍵得到值,因此鍵不允許鍵重復(fù),但允許值重復(fù)。
HashMap 是一個(gè)最常用的Map,它根據(jù)鍵的HashCode 值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為 Null;HashMap不支持線程的同步,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫HashMap;可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力。
LinkedHashMap LinkedHashMap也是一個(gè)HashMap,但是內(nèi)部維持了一個(gè)雙向鏈表,可以保持順序
TreeMap 不僅可以保持順序,而且可以用于排序
HashMap例子:
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("a3", "aa");
map.put("a2", "bb");
map.put("b1", "cc");
for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
String name = (String) iterator.next();
System.out.println(name);
}
}
LinkedHashMap例子:
public static void main(String[] args) {
Map<String, String> map = new LinkedHashMap<String, String>();
map.put("a3", "aa");
map.put("a2", "bb");
map.put("b1", "cc");
for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
String name = (String) iterator.next();
System.out.println(name);
}
}
TreeMap例子:
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>(new Comparator<Object>(){
Collator collator = Collator.getInstance();
public int compare(Object o1, Object o2) {
CollationKey key1 = collator.getCollationKey(o1.toString());
CollationKey key2 = collator.getCollationKey(o2.toString());
return key1.compareTo(key2);
//return collator.compare(o1, o2);
}});
map.put("a3", "aa");
map.put("a2", "bb");
map.put("b1", "cc");
for (Iterator iterator = map.values().iterator(); iterator.hasNext();) {
String name = (String) iterator.next();
System.out.println(name);
}
}
運(yùn)行這三個(gè)例子,體會(huì)一下它們之間的區(qū)別。
posted on 2011-11-18 10:30 AthrunWang 閱讀(170) 評(píng)論(0) 編輯 收藏