一、是什么
List(列表) 特征是其元素以線性方式存儲,集合中可以存放重復(fù)對象。
Map(映射) 是一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象。 Map沒有繼承于Collection接口 從Map集合中檢索元素時,只要給出鍵對象,就會返回對應(yīng)的值對象。
二、區(qū)別
Collection 和 Map 的區(qū)別
容器內(nèi)每個為之所存儲的元素個數(shù)不同。
Collection類型者,每個位置只有一個元素。
Map類型者,持有 key-value pair,像個小型數(shù)據(jù)庫。
Collection
? ? --List:將以特定次序存儲元素。所以取出來的順序可能和放入順序不同。
? ? ? ? ? --ArrayList / LinkedList / Vector
? ? --Set : 不能含有重復(fù)的元素
? ? ? ? ? --HashSet / TreeSet
Map
? ? --HashMap
? ? --HashTable
? ? --TreeMap
List,Set,Map將持有對象一律視為Object型別。
Collection、List、Set、Map都是接口,不能實例化。
? ? 繼承自它們的 ArrayList, Vector, HashTable, HashMap是具象class,這些才可被實例化。
vector容器確切知道它所持有的對象隸屬什么型別。vector不進(jìn)行邊界檢查。
注:
1. 如果涉及到堆棧,隊列等操作,應(yīng)該考慮用List,對于需要快速插入,刪除元素,應(yīng)該使用LinkedList,如果需要快速隨機(jī)訪問元素,應(yīng)該使用ArrayList。
2. 如果程序在單線程環(huán)境中,或者訪問僅僅在一個線程中進(jìn)行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應(yīng)該使用同步的類。
3. 在除需要排序時使用TreeSet,TreeMap外,都應(yīng)使用HashSet,HashMap,因為他們 的效率更高。
4. 要特別注意對哈希表的操作,作為key的對象要正確復(fù)寫equals和hashCode方法。
5. 容器類僅能持有對象引用(指向?qū)ο蟮闹羔槪?,而不是將對象信息copy一份至數(shù)列某位置。一旦將對象置入容器內(nèi),便損失了該對象的型別信息。
6. 盡量返回接口而非實際的類型,如返回List而非ArrayList,這樣如果以后需要將ArrayList換成LinkedList時,客戶端代碼不用改變。這就是針對抽象編程。
三、怎么用
1:申明一個List
List<Object> list = new ArrayList<Object>();
Object:指List里的值是什么類型的,Object代表可以是任何形式的
2:方法
?(1):add() ? 添加數(shù)據(jù) ? ? ?
list.add("北京");
list.add("深圳");
list.add("上海");
(2):get(index)
list.get(0)? 結(jié)果:北京
(3):size() ?list里的數(shù)據(jù)個數(shù)
list.size()
(4):遍歷list
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
list取值是通過下標(biāo),下標(biāo)從0開始
(二):? Map
1:申明一個Map
Map<String,Object> map = new HashMap<String,Object>();
說明:Map是通過key-value(值鍵對) ,String代表key的類型(一般都是String),Object代表value的類型
2:put(key,value) ?賦值
map.put("name", "小明");
? map.put("sex", "男");
? map.put("age", 18);
3:get(key) ?取值 ? ? ?
? map.get("name")?
結(jié)果:小明
(三):List<Map>
1:申明一個List<Map>
? ? ??List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
2:賦值
(1):先賦值給Map
Map<String,Object> map1 = new HashMap<String,Object>();
map1.put("name", "小明");
map1.put("sex", "男");
map1.put("age", 18);
Map<String,Object> map2 = new HashMap<String,Object>();
map2.put("name", "小紅");
map2.put("sex", "女");
map2.put("age", 16);
(2):將map添加到List中
listMap.add(map1);
listMap.add(map2);
結(jié)果:[{sex=男, name=小明, age=18}, {sex=女, name=小紅, age=16}]
(3):遍歷
for(int i = 0;i<listMap.size();i++){
System.out.print(listMap.get(i).get("name"));
System.out.print(listMap.get(i).get("sex"));
System.out.print(listMap.get(i).get("age"));
System.out.println();
}
參考:
https://www.cnblogs.com/wuyifu/p/3741433.html