java開發(fā)map、list區(qū)別

一、是什么

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

https://blog.csdn.net/qq_29284035/article/details/78872250

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 九種基本數(shù)據(jù)類型的大小,以及他們的封裝類。(1)九種基本數(shù)據(jù)類型和封裝類 (2)自動裝箱和自動拆箱 什么是自動裝箱...
    關(guān)瑋琳linSir閱讀 2,064評論 0 47
  • 一、為什么會出現(xiàn)集合類 1.集合是一個容器,為了方便的對多個對象進(jìn)行操作。 2.集合容器同數(shù)組容器的...
    大禹編程扛把子閱讀 672評論 0 0
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,455評論 0 16
  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,569評論 0 4
  • 畢業(yè)=失業(yè),現(xiàn)在的我該何去何從…… 心情很失落,不愿意講話,不知道自己想要做什么,不知道自己能做的了什么,這一步要...
    瘋子馬閱讀 374評論 1 0

友情鏈接更多精彩內(nèi)容