Jave集合的了解

數(shù)組,是最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),是一種用來存儲(chǔ)多個(gè)數(shù)據(jù)的容器.

數(shù)據(jù)結(jié)構(gòu):
把多個(gè)數(shù)據(jù)按照一定的存儲(chǔ)方式,存儲(chǔ)起來,稱存儲(chǔ)方式之為數(shù)據(jù)結(jié)構(gòu).
數(shù)據(jù)的存儲(chǔ)方式有很多,數(shù)組,隊(duì)列,鏈表,棧,哈希表等等.
不同的數(shù)據(jù)結(jié)構(gòu),性能是不一樣的,比如有的插入比較快,查詢比較快,但是刪除比較慢.
有的刪除比較快,插入比較快,但是查詢比較慢.
根據(jù)實(shí)際操作,合理選擇即可

集合

  • 集合和數(shù)組的區(qū)別

數(shù)組和集合類都是容器
數(shù)組長(zhǎng)度是固定的啊央,集合長(zhǎng)度是可變的。數(shù)組中可以存儲(chǔ)基本數(shù)據(jù)類型,集合只能存儲(chǔ)對(duì)象, 數(shù)組中存儲(chǔ)數(shù)據(jù)類型是單一的,數(shù)組一旦初始化罪佳,長(zhǎng)度固定叛赚,且操作復(fù)雜GURD,集合中可以存儲(chǔ)任意類型的對(duì)象豹爹。

集合類的特點(diǎn)
用于存儲(chǔ)對(duì)象,長(zhǎng)度是可變的矛纹,可以存儲(chǔ)不同類型的對(duì)象臂聋。

數(shù)組的特點(diǎn):
1. 只能存儲(chǔ)同一種數(shù)據(jù)類型的數(shù)據(jù)。
2. 一旦初始化或南,長(zhǎng)度固定孩等。
3. 數(shù)組中的元素與元素之間的內(nèi)存地址是連續(xù)的
4.Object類型的數(shù)組可以存儲(chǔ)任意類型的數(shù)據(jù)
注意: 集合和數(shù)組中存儲(chǔ)都是對(duì)象的引用,而不是對(duì)象本身

  • 集合的分類
  • Collection: 單列集合
    • 1.List:

如果是實(shí)現(xiàn)了List接口的集合類采够,具備的特點(diǎn): 有序瞎访,可重復(fù);只有List接口下面的集合類才具備索引值。其他接口下面的集合類都沒有索引值

    - 1.1.ArrayList:  

底層是維護(hù)了一個(gè)Object數(shù)組實(shí)現(xiàn) 的吁恍, 特點(diǎn): 查詢速度快扒秸,增刪慢。
什么時(shí)候使用ArrayList: 如果目前的數(shù)據(jù)是查詢比較多冀瓦,增刪比較少的時(shí)候伴奥,那么就使用ArrayList存儲(chǔ)這批數(shù)據(jù)。
注意: 當(dāng)使用無參構(gòu)造函數(shù)時(shí)翼闽,Object數(shù)組默認(rèn)的容量是10拾徙,當(dāng)長(zhǎng)度不夠時(shí),自動(dòng)增長(zhǎng)0.5倍感局。

  - 1.2.LinkedList:  

底層是使用了鏈表數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的尼啡, 特點(diǎn): 查詢速度慢,增刪快
由于鏈表實(shí)現(xiàn), 增加時(shí)只要讓前一個(gè)元素記住自己就可以, 刪除時(shí)讓前一個(gè)元素記住后一個(gè)元素, 后一個(gè)元素記住前一個(gè)元素. 這樣的增刪效率較高但查詢時(shí)需要一個(gè)一個(gè)的遍歷, 所以效率較低
- 1.3.Vector:

和ArrayList原理相同,底層也是維護(hù)了一個(gè)Object的數(shù)組實(shí)現(xiàn)的, 但Vector是線程安全的, 效率略低, , 考慮了線程安全問題, 所以效率略低

  • 2.Set:

如果是實(shí)現(xiàn)了Set接口的集合類询微,具備特點(diǎn): 無序崖瞭,不可重復(fù)。

  - 2.1HashSet

底層是使用了哈希表來支持的撑毛,特點(diǎn): 存取速度快.
hashSet的實(shí)現(xiàn)原理:
往Haset添加元素的時(shí)候书聚,HashSet會(huì)先調(diào)用元素的hashCode方法得到元素的哈希值 ,然后通過元素 的哈希值經(jīng)過移位等運(yùn)算,就可以算出該元素在哈希表中 的存儲(chǔ)位置雌续。
情況1: 如果算出元素存儲(chǔ)的位置目前沒有任何元素存儲(chǔ)斩个,那么該元素可以直接存儲(chǔ)到該位置上。
情況2: 如果算出該元素的存儲(chǔ)位置目前已經(jīng)存在有其他的元素了驯杜,那么會(huì)調(diào)用該元素的equals方法與該位置的元素再比較一次受啥,如果equals返回的是true,那么該元素與這個(gè)位置上的元素就視為重復(fù)元素鸽心,不允許添加滚局,如果equals方法返回的是false,那么該元素運(yùn)行 添加再悼。

  - 2.2TreeSet

TreeSet低城是使用紅黑樹(二叉樹)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的,存儲(chǔ)規(guī)則:左小到右膝但,
TreeSet要注意的事項(xiàng):
(1). 往TreeSet添加元素的時(shí)候冲九,如果元素本身具備了自然順序的特性,那么就按照元素自然順序的特性進(jìn)行排序存儲(chǔ)跟束。
(2). 往TreeSet添加元素的時(shí)候莺奸,如果元素本身不具備自然順序的特性,那么該元素所屬的類必須要實(shí)現(xiàn)Comparable接口冀宴,把元素的比較規(guī)則定義在compareTo(T o)方法上灭贷。
(3). 如果比較元素的時(shí)候,compareTo方法返回 的是0略贮,那么該元素就被視為重復(fù)元素甚疟,不允許添加.(注意:TreeSet與HashCode、equals方法是沒有任何關(guān)系逃延。)
(4). 往TreeSet添加元素的時(shí)候, 如果元素本身沒有具備自然順序 的特性览妖,而元素所屬的類也沒有實(shí)現(xiàn)Comparable接口,那么必須要在創(chuàng)建TreeSet的時(shí)候傳入一個(gè)比較器揽祥。
(5). 往TreeSet添加元素的時(shí)候讽膏,如果元素本身不具備自然順序的特性,而元素所屬的類已經(jīng)實(shí)現(xiàn)了Comparable接口拄丰, 在創(chuàng)建TreeSet對(duì)象的時(shí)候也傳入了比較器那么是以比較器的比較規(guī)則優(yōu)先使用府树。
自定義定義比較器: 自定義一個(gè)類實(shí)現(xiàn)Comparator接口即可,把元素與元素之間的比較規(guī)則定義在compare方法內(nèi)即可料按。
自定義比較器的格式 :

} ```
注意:TreeSet可對(duì)String排序(有默認(rèn)順序), 
字符串的比較規(guī)則:
情況一: 對(duì)應(yīng)位置有不同的字符出現(xiàn)奄侠, 就比較的就是對(duì)應(yīng)位置不同的字符。
情況 二:對(duì)應(yīng)位置上 的字符都一樣载矿,比較的就是字符串的長(zhǎng)度遭铺。
推薦使用:使用比較器(Comparator)。 
      - 2.3LinkedHashSet

  - Map: 鍵值對(duì)
      - HashMap
      - TreeMap
      - HashTable
      - LinkedHashMap

- Collection接口
>Collection是單例集合的跟接口,一個(gè)Collection代表一組Object魂挂,即Collection的元素(Elements)甫题。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set涂召。

- Map接口

- Iterator迭代器
>主要用于遍歷集合對(duì)象坠非,Jdk1.5之后添加的新接口, Collection的父接口. 實(shí)現(xiàn)了Iterable接口的類就是可迭代的.并且支持增強(qiáng)for循環(huán)。該接口只有一個(gè)方法即獲取迭代器的方法iterator()可以獲取每個(gè)容器自身的迭代器Iterator果正。(Collection)集合容器都需要獲取迭代器(Iterator)于是在5.0后又進(jìn)行了抽取將獲取容器迭代器的iterator()方法放入到了Iterable接口中炎码。Collection接口進(jìn)程了Iterable,所以Collection體系都具備獲取自身迭代器的方法秋泳,只不過每個(gè)子類集合都進(jìn)行了重寫(因?yàn)閿?shù)據(jù)結(jié)構(gòu)不同)

   - Iterator接口定義的方法 
>Itreator   該接口是集合的迭代器接口類

定義了常見的迭代方法

1:boolean hasNext()

判斷集合中是否有元素潦闲,如果有元素可以迭代,就返回true迫皱。

2: E next()  

返回迭代的下一個(gè)元素歉闰,注意:如果沒有下一個(gè)元素時(shí),調(diào)用
next元素會(huì)拋出NoSuchElementException

3: voidremove()

從迭代器指向的集合中移除迭代器返回的最后一個(gè)元素(可選操

作)卓起。

  -  List特有的迭代器ListIterator
>Iterator在迭代時(shí)和敬,只能對(duì)元素進(jìn)行獲取(next())和刪除(remove())的操作。
對(duì)于Iterator 的子接口ListIterator在迭代list集合時(shí)戏阅,還可以對(duì)元素進(jìn)行添加(add(obj))昼弟,修改set(obj)的操作。

定義一下特有方法
1. add(E e)    
將指定的元素插入列表(可選操作)奕筐。該元素直接插入到返回的下一個(gè)元素的前面(如果有)

2.void set(E o) 
用指定元素替換 next或 previous返回的最后一個(gè)元素

3.hasPrevious()    
逆向遍歷列表舱痘,列表迭代器有多個(gè)元素,則返回true离赫。

4.previous()       
返回列表中的前一個(gè)元素衰粹。

- 泛型
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笆怠,隨后出現(xiàn)的幾起案子铝耻,更是在濱河造成了極大的恐慌,老刑警劉巖蹬刷,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓢捉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡办成,警方通過查閱死者的電腦和手機(jī)泡态,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迂卢,“玉大人某弦,你說我怎么就攤上這事桐汤。” “怎么了靶壮?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵怔毛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我腾降,道長(zhǎng)拣度,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任螃壤,我火速辦了婚禮抗果,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奸晴。我一直安慰自己冤馏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布寄啼。 她就那樣靜靜地躺著逮光,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辕录。 梳的紋絲不亂的頭發(fā)上睦霎,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天梢卸,我揣著相機(jī)與錄音走诞,去河邊找鬼。 笑死蛤高,一個(gè)胖子當(dāng)著我的面吹牛蚣旱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戴陡,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼塞绿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了恤批?” 一聲冷哼從身側(cè)響起异吻,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喜庞,沒想到半個(gè)月后诀浪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡延都,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年雷猪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晰房。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡求摇,死狀恐怖射沟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情与境,我是刑警寧澤验夯,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站嚷辅,受9級(jí)特大地震影響簿姨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜簸搞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一扁位、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趁俊,春花似錦域仇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怔软,卻和暖如春垦细,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挡逼。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工括改, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人家坎。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓嘱能,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親虱疏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惹骂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 四、集合框架 1:String類:字符串(重點(diǎn)) (1)多個(gè)字符組成的一個(gè)序列做瞪,叫字符串对粪。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 736評(píng)論 0 2
  • 一、基礎(chǔ)知識(shí):1装蓬、JVM著拭、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,369評(píng)論 0 4
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 870評(píng)論 0 1
  • Java集合類可用于存儲(chǔ)數(shù)量不等的對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊(duì)列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,922評(píng)論 0 13
  • 集合類框架的介紹: ![Java 集合類框架](https://upload-images.jianshu.io/...
    LynnGuo閱讀 753評(píng)論 0 1