摘要:集合類(lèi)主要負(fù)責(zé)保存盛裝其他數(shù)據(jù),因此集合類(lèi)也被稱為容器類(lèi)。所有的集合類(lèi)都位于包下。表示一組對(duì)象,這些對(duì)象也稱為的元素。成員方法把集合轉(zhuǎn)成數(shù)組迭代器,集合的專用遍歷方式之接口概述有序的,也稱為序列。
前言
在編程中,常常需要集中存放多個(gè)數(shù)據(jù)。從傳統(tǒng)意義上講,數(shù)組是我們的一個(gè)很好的選擇,前提是我們實(shí)現(xiàn)已經(jīng)明確知道我們將要保存的對(duì)象的數(shù)量。
一旦在數(shù)組初始化時(shí)指定了數(shù)組長(zhǎng)度,這個(gè)數(shù)組長(zhǎng)度就是不可變的,如果我們需要保存一個(gè)可以動(dòng)態(tài)增長(zhǎng)的數(shù)據(jù),在編譯時(shí)無(wú)法確定具體的數(shù)量,java的集合類(lèi)就是一個(gè)很好的設(shè)計(jì)方案。
集合類(lèi)概述:面對(duì)對(duì)象語(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式,所以為了方便對(duì)多個(gè)對(duì)象的操作,Java就提供類(lèi)集合類(lèi)。
數(shù)組和集合類(lèi)都是容器,不同之處:
(1)數(shù)組雖然也可以存儲(chǔ)對(duì)象,但長(zhǎng)度是固定的;集合的長(zhǎng)度是可變的。 (2)數(shù)組中可以存儲(chǔ)基本數(shù)據(jù)類(lèi)型,集合只能存儲(chǔ)對(duì)象。
集合類(lèi)特點(diǎn):集合只用于存儲(chǔ)對(duì)象,集合長(zhǎng)度可變,集合可以存儲(chǔ)不同類(lèi)型的對(duì)象。
集合類(lèi)主要負(fù)責(zé)保存、盛裝其他數(shù)據(jù),因此集合類(lèi)也被稱為容器類(lèi)。
所有的集合類(lèi)都位于java.util包下。
細(xì)數(shù)java集合,其中比較常見(jiàn)的就是List、Set、Map、和Queue,在這四者中,除了Map,其他三個(gè)接口都繼承于Collection。
CollectionCollection接口概述:Collection層次結(jié)構(gòu)中的根接口。
Collection表示一組對(duì)象,這些對(duì)象也稱為collection的元素。
一些collection允許有重復(fù)的元素,而另一些不允許;一些collection是有序的,而另一些則是無(wú)序的。
成員方法:
(1)boolean add(E e) (2)boolean remove(Object o) (3)void clear() (4)boolean contains(Object o) (5)boolean isEmpty() (6)int size() (7)boolean addAll(Collection c) (8)boolean removeAll(Collection c) (9)boolean containsAll(Collection c) (10)boolean retainAll(Collection c) (11)把集合轉(zhuǎn)成數(shù)組:Object[] toArray() (12)迭代器,集合的專用遍歷方式:Iterator iterator()Collection之List接口
概述:有序的collection,也稱為序列。
List接口在java集合類(lèi)中充當(dāng)?shù)氖且粋€(gè)元素有序、元素可重復(fù)的集合角色。
繼承于Collection集合,所以擁有Collection集合的所有方法。
List集合也擁有屬于自己的方法:用來(lái)實(shí)現(xiàn)根據(jù)元素索引來(lái)操作集合元素的作用。
此接口的用戶可以對(duì)列表中的每個(gè)元素的插入位置進(jìn)行精確的控制。
用戶可以根據(jù)元素的整數(shù)索引(在列表中的位置)訪問(wèn)元素,并搜索列表中的元素。
成員方法:
(1)void add(int index,E element) (2)E remove(int index) (3)E get(int index) (4)E set(int index,E element) (5)ListIterator listIterator()常見(jiàn)的繼承List接口的實(shí)用類(lèi)
ArrayList:
(1)基于數(shù)組實(shí)現(xiàn)的List類(lèi),封裝了一個(gè)動(dòng)態(tài)的、允許再分配的Object[]數(shù)組 (2)ArrayList用initialCapacity參數(shù)來(lái)設(shè)置該數(shù)組的長(zhǎng)度,當(dāng)長(zhǎng)度超過(guò)預(yù)設(shè)值后,ArrayList會(huì)動(dòng)態(tài)增加。 (3)ArrayList類(lèi)是線程不安全的,如果要保證該集合的同步性,必須在程序中手動(dòng)保存。 (4)底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢 (5)線程不安全,效率高 (6)增刪慢也是在數(shù)據(jù)量較大的情況下,在數(shù)據(jù)量較小的情況下,ArrayList()不一定比LinkedList()方法慢。 (7)另外,ArrayList在末尾插入和刪除數(shù)據(jù)的話,速度反而比LinkedList要快。
LinkedList:
(1)底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快。 (2)除了繼承List接口外,LinkedList接口也繼承了Deque接口,所以也可以當(dāng)作棧和隊(duì)列(雙向)來(lái)使用。 (3)成員方法: 【1】public void addFirst(E e)及addLast(E e) 【2】public E getFirst()及getLast() 【3】public E removeFirst()及public E removeLast()
Vector:
(1)底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢 (2)Vector與Array List十分的相像,都是基于數(shù)組實(shí)現(xiàn)的List類(lèi),也是封裝了一個(gè)動(dòng)態(tài)分配的Object[]數(shù)組,也可以使用initialCapacity參數(shù)來(lái)設(shè)置數(shù)組的長(zhǎng)度。 (3)Vector是線程安全的,因此性能差
Stack:
(1)Stack是繼承Vector的子類(lèi),它主要是用來(lái)模擬棧,因此也具備了peek()、pop()、push()等主要用于棧操作的方法。 (2)Stack也是線程安全的,因此性能差
使用List集合的建議:
(1)遍歷集合元素。ArrayList和Vector使用get()方法來(lái)獲取遍歷元素,LinkedList應(yīng)該采用迭代器來(lái)遍歷集合元素。 (2)插入和刪除。當(dāng)這類(lèi)操作較多的時(shí)候,優(yōu)先考慮使用LinkedList。 (3)多線程。當(dāng)需要使用到多線程的ArrayList時(shí),可以使用Collections將該集合類(lèi)包裝成線程安全的集合。Collection之Set接口
一個(gè)不包含重復(fù)元素的collection。
Set接口是一個(gè)無(wú)序的、不可重復(fù)的集合。
Set集合中加入數(shù)據(jù)元素時(shí),Set集合通常不用記住元素的添加順序。
當(dāng)兩個(gè)相同元素加入到一個(gè)Set集合中,則添加操作失敗。
常見(jiàn)的繼承Set接口的實(shí)用類(lèi)
HashSet:
(1)按照hash算法來(lái)存儲(chǔ)集合中的元素,因此具有良好的存取和查找功能。 (2)無(wú)序的,非線程同步的,集合元素可以是null (3)HashSet集合存儲(chǔ)過(guò)程: 【1】當(dāng)向HashSet集合中存入一個(gè)元素時(shí),HashSet會(huì)調(diào)用該對(duì)象的hashCode()方法來(lái)得到該對(duì)象的hashCode值,然后根據(jù)該值決定該對(duì)象在HashSet中的存儲(chǔ)位置。 【2】如果有兩個(gè)元素通過(guò)equals()方法返回true,但他們的hashCode()方法返回值不相等,HashSet也會(huì)將其存儲(chǔ)在不同的位置。 【3】也就是說(shuō):HashSet的添加元素判斷標(biāo)準(zhǔn)是:兩個(gè)對(duì)象通過(guò)equals()方法比較相等,并且兩個(gè)對(duì)象的hashCode()方法返回值也相等。
LinkedHashSet:
(1)元素有序并且唯一。 (2)由鏈表保證元素有序。 (3)由哈希表保證元素唯一。 (4)LinkedHashSet是繼承HashSet的子類(lèi)。
TreeSet:
(1)使用元素的自然順序?qū)υ剡M(jìn)行排序。 (2)或者根據(jù)創(chuàng)建set時(shí)提供的Comparator進(jìn)行排序。 (3)TreeSet是SortedSet接口的實(shí)現(xiàn)類(lèi),所以TreeSet可以確保集合元素處于排序狀態(tài)。 (4)TreeSet使用紅黑樹(shù)來(lái)維護(hù)集合元素的次序。如果實(shí)現(xiàn)comparator()方法,可以實(shí)現(xiàn)定制排序。如果采用自然排序,則返回null。
EnumSet:
(1)專為枚舉類(lèi)設(shè)計(jì)的集合類(lèi) (2)所有元素都必須是指定枚舉類(lèi)型的枚舉值,該枚舉類(lèi)型在創(chuàng)建EnumSet顯式或隱式的指定。 (3)EnumSet在內(nèi)部以位向量的形式存儲(chǔ),十分緊湊高效,因此EnumSet對(duì)象占用內(nèi)存小,并且運(yùn)行效率高 (4)該集合元素中不允許加入null元素。Map接口
該接口無(wú)法繼承Collection接口,主要原因還是因?yàn)镸ap是用來(lái)存儲(chǔ)具有映射關(guān)系的數(shù)據(jù)。
Map中保存著兩組值。一組值用來(lái)保存Map中的Key,另外一組用來(lái)保存Map里的value。
值得注意的是,Map中的Key不能重復(fù),判斷標(biāo)準(zhǔn)是同一個(gè)Map對(duì)象的任何兩個(gè)Key通過(guò)equals方法比較總是返回false
成員方法:
(1)V put(K key,V value) (2)V remove(Object key) (3)void clear() (4)boolean containsKey(Object key) (5)boolean containsValue(Object value) (6)boolean isEmpty() (7)int size()
Map接口和Collection接口的不同:
(1)Map是雙列的,Collection是單列的 (2)Map的健是唯一的,Collection的子體系Set是唯一的 (3)Map集合的數(shù)據(jù)結(jié)構(gòu)值針對(duì)健有效,跟值無(wú)關(guān) (4)Collection集合的數(shù)據(jù)結(jié)構(gòu)是針對(duì)元素有效的常見(jiàn)的繼承Map接口的實(shí)用類(lèi)
HashMap:
(1)線程不安全,并且HashMap中可以使用null作為key或者value (2)key是哈希表結(jié)構(gòu),可以保證健的唯一性
LinkedHashMap:
(1)LinkedHashMap使用一個(gè)雙向鏈表來(lái)維護(hù)key-value對(duì)的次序 (2)LinkedHashMap是一個(gè)有序的Map集合,順序與key-value對(duì)的插入順序保持一致 (3)具有可預(yù)知的迭代順序
TreeMap:
(1)TreeMap是一個(gè)紅黑樹(shù)的結(jié)構(gòu),每個(gè)key-value作為紅黑樹(shù)的一個(gè)節(jié)點(diǎn) (2)TreeMap也會(huì)對(duì)key進(jìn)行排序,也分為自然排序和定制排序兩種 (3)健的紅黑樹(shù)結(jié)構(gòu),可以保重健的排序和唯一性Iterator
Iterator概述:對(duì)collection進(jìn)行迭代的迭代器,依賴于集合而存在
凡是實(shí)現(xiàn)了Collection接口的集合類(lèi),都有一個(gè)Iterator方法,用于返回一個(gè)實(shí)現(xiàn)了Iterator接口的對(duì)象,用于遍歷集合。
成員方法:
(1)boolean hasNext() (2)E next() (3)remove()參考鏈接
https://www.cnblogs.com/zhouy...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/77081.html
摘要:哪吒社區(qū)技能樹(shù)打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁(yè)左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無(wú)意間聽(tīng)到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹(shù)打卡?【打卡貼 day2...
摘要:新特性概述系列一安裝及使用系列二運(yùn)行系列三模塊系統(tǒng)精要系列四更新系列五系列六系列七系列八系列九與的區(qū)別遷移注意事項(xiàng)參數(shù)遷移相關(guān)選項(xiàng)解析使用構(gòu)建實(shí)例使用示例帶你提前了解中的新特性 Java語(yǔ)言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...
摘要:工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)這一節(jié),我們來(lái)學(xué)習(xí)下的數(shù)據(jù)結(jié)構(gòu)。枚舉接口定義了一種從數(shù)據(jù)結(jié)構(gòu)中取回連續(xù)元素的方式。六字典字典類(lèi)是一個(gè)抽象類(lèi),它定義了鍵映射到值的數(shù)據(jù)結(jié)構(gòu)。哈希表鍵的具體含義完全取決于哈希表的使用情景和它包含的數(shù)據(jù)。 Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),這一節(jié),我們來(lái)學(xué)習(xí)下Java的數(shù)據(jù)結(jié)構(gòu)。 一、數(shù)據(jù)結(jié)構(gòu)分類(lèi) 枚舉(Enumeration) 位集合(BitSet) 向量(V...
摘要:導(dǎo)讀閱讀本文需要有足夠的時(shí)間,筆者會(huì)由淺到深帶你一步一步了解一個(gè)資深架構(gòu)師所要掌握的各類(lèi)知識(shí)點(diǎn),你也可以按照文章中所列的知識(shí)體系對(duì)比自身,對(duì)自己進(jìn)行查漏補(bǔ)缺,覺(jué)得本文對(duì)你有幫助的話,可以點(diǎn)贊關(guān)注一下。目錄一基礎(chǔ)篇二進(jìn)階篇三高級(jí)篇四架構(gòu)篇五擴(kuò) 導(dǎo)讀:閱讀本文需要有足夠的時(shí)間,筆者會(huì)由淺到深帶你一步一步了解一個(gè)資深架構(gòu)師所要掌握的各類(lèi)知識(shí)點(diǎn),你也可以按照文章中所列的知識(shí)體系對(duì)比自身,對(duì)自己...
摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄业哪繕?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...
閱讀 2228·2021-11-22 15:29
閱讀 4109·2021-11-04 16:13
閱讀 997·2019-08-29 16:58
閱讀 345·2019-08-29 16:08
閱讀 1464·2019-08-23 17:56
閱讀 2391·2019-08-23 17:06
閱讀 3170·2019-08-23 16:55
閱讀 2064·2019-08-23 16:22