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