List、Map、Set接口

List和Set是繼承了Collection接口的,Map沒有繼承或?qū)崿F(xiàn)任何接口。


Map和List的區(qū)別

一個(gè)是存儲單列數(shù)據(jù)的集合,另一個(gè)是存儲鍵和值這樣的雙列數(shù)據(jù)的集合,List 中存儲的數(shù) 據(jù)是有順序,并且允許重復(fù);Map 中存儲的數(shù)據(jù)是沒有順序的,其鍵是不能重復(fù)的,它的 值是可以有重復(fù)的。


List、Map、Set 三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?

<li>首先,List 與 Set 具有相似性,它們都是單列元素的集合,所以,它們有一個(gè)功共同的父接 口,叫 Collection。Set 里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個(gè)相等(注意, 不是僅僅是相同)的對象,即假設(shè) Set 集合中有了一個(gè) A 對象,現(xiàn)在我要向 Set 集合再存 入一個(gè) B 對象,但 B 對象與 A 對象 equals 相等,則 B 對象存儲不進(jìn)去,所以,Set 集合的 add 方法有一個(gè) boolean 的返回值,當(dāng)集合中沒有某個(gè)元素,此時(shí) add 方法可成功加入該 元素時(shí),則返回 true,當(dāng)集合含有與某個(gè)元素 equals 相等的元素時(shí),此時(shí) add 方法無法加 入該元素,返回結(jié)果為 false。Set 取元素時(shí),沒法說取第幾個(gè),只能以 Iterator 接口取得所 有的元素,再逐一遍歷各個(gè)元素。
<li>List 表示有先后順序的集合,注意,不是那種按年齡、按大小、按價(jià)格之類的排序。 當(dāng)我們多次調(diào)用 add(Obj e)方法時(shí),每次加入的對象就像火車站買票有排隊(duì)順序一樣,按先 來后到的順序排序。有時(shí)候,也可以插隊(duì),即調(diào)用 add(int index,Obj e)方法,就可以指定當(dāng) 前對象在集合中的存放位置。一個(gè)對象可以被反復(fù)存儲進(jìn) List 中,每調(diào)用一次 add 方法, 這個(gè)對象就被插入進(jìn)集合中一次,其實(shí),并不是把這個(gè)對象本身存儲進(jìn)了集合中,而是在集 合中用一個(gè)索引變量指向這個(gè)對象,當(dāng)這個(gè)對象被 add 多次時(shí),即相當(dāng)于集合中有多個(gè)索 引指向了這個(gè)對象,List 除了可以以 Iterator 接口取得所有的元素,再逐一遍 歷各個(gè)元素之外,還可以調(diào)用 get(index i)來明確說明取第幾個(gè)。
<li>Map 與 List 和 Set 不同,它是雙列的集合,其中有 put 方法,定義如下:put(obj key,objvalue),每次存儲時(shí),要存儲一對 key/value,不能存儲重復(fù)的 key,這個(gè)重復(fù)的規(guī) 則也是按 equals 比較相等??梢愿鶕?jù) key 獲得相應(yīng)的 value,即 get(Object key)返回 值為 key 所對應(yīng)的 value。另外,也可以獲得所有的 key 的集合,還可以獲得所有的 value 的結(jié)合,還可以獲得 key 和 value 組合成的 Map.Entry 對象的集合。
<li>List 以特定次序來持有元素,可有重復(fù)元素。Set 無法擁有重復(fù)元素,內(nèi)部排序。Map 保存 key-value 值,value 可多值。
HashSet 按照 hashcode 值的某種運(yùn)算方式進(jìn)行存儲,而不是直接按 hashCode 值的大小進(jìn) 行存儲。例如,"abc"---> 78,"def" ---> 62,"xyz" ---> 65在 hashSet 中的存儲順序不是 62,65,78,LinkedHashSet 按插入的順序存儲,那被存儲對象 的 hashcode 方法還有什么作用呢?hashset 集合比較兩個(gè)對象是否相等,首先看 hashcode 方法是否相等,然后看 equals 方法是否相等。new 兩個(gè) Student 插入到 HashSet 中,看 HashSet 的 size,實(shí)現(xiàn) hashcode 和 equals 方法后再看 size。所以同一個(gè)對象可以在 Vector 中加入多次。往集合里面加元素,相當(dāng)于集合里用一根繩子連接 到了目標(biāo)對象。往 HashSet 中卻加不了多次的。

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

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,741評論 18 399
  • 本篇文章帶你從Java源碼深入解析關(guān)于Java容器的概念。 參考文獻(xiàn): Java容器相關(guān)知識全面總結(jié) Java官方...
    Tsy遠(yuǎn)閱讀 20,255評論 13 142
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等,對于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,657評論 0 3
  • 一、前言 Java集合主要分為三種類型:Set(集)、List(列表)和Map(映射)。 先簡單說下集合和數(shù)組的區(qū)...
    小怪聊職場閱讀 6,633評論 4 54
  • 三年風(fēng)雪為今朝, 兩日貢舉終小可。 天下誰能判吾生, 定逆蒼天為此生。
    均黎閱讀 349評論 0 0

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