Java集合總結(jié)
集合和數(shù)組在存儲(chǔ)數(shù)據(jù)的時(shí)候是各有優(yōu)缺點(diǎn)的,先總結(jié)下集合和數(shù)組的區(qū)別
1.數(shù)組長度固定,集合長度不固定
2.數(shù)組只能存儲(chǔ)同一類型的元素,集合可以存儲(chǔ)不同數(shù)據(jù)類型(在引入泛型后,可以規(guī)定元素的類型相同)
3.數(shù)組可以存儲(chǔ)基本類型也可以存儲(chǔ)引用類型,集合只能存儲(chǔ)引用類型
集合類由兩大接口派生而出:Collection<E>和Map<K,V>
Collection<E>:
是接口,需要由實(shí)現(xiàn)類去實(shí)現(xiàn)接口,存儲(chǔ)單列元素。
它的主要方法:
添加:boolean add(E e) 移除:boolean remove(Object o) 判斷是否包含某元素:boolean contains(Object o) 返回集合中元素的個(gè)數(shù):int size() 判斷集合是否為空:boolean isEmpty() 迭代器:Iterator<E> iterator() 是Collection集合特有的一種遍歷方式,實(shí)現(xiàn)了Iterable<E>接口,使用boolean hasNext():如果迭代器中還有元素,則返回true。和E next():返回迭代器中的下一個(gè)元素 這兩個(gè)方法進(jìn)行遍歷
它的子接口:List<E>
和Set<E>
及Queue<E>
。List集合中元素是有序不唯一的(有序是指存儲(chǔ)有序但不是排序),Set集合中元素是無序但唯一的。
List<E>
集合的實(shí)現(xiàn)類:
- ArrayList:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢;線程不安全,效率高;
- Vector:底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢;線程安全,效率低;
- LinkedList:底層數(shù)據(jù)結(jié)構(gòu)是聯(lián)邦,查詢慢,增刪快;線程不安全,效率低。
- Queue<E>:底層數(shù)據(jù)結(jié)構(gòu)是隊(duì)列,類似于List(Queue接觸較少,后面不做總結(jié))
Set<E>
集合的實(shí)現(xiàn)類:
HashSet:底層數(shù)據(jù)結(jié)構(gòu)是哈希表,依賴HashCode()方法和equals()方法。這兩個(gè)方法的執(zhí)行順序:先HashCode(),值不同:添加;值相同:equals()值,不同:添加;相同:不添加。 其子類LinkedHashSet,底層數(shù)據(jù)結(jié)構(gòu)由哈希表及鏈表構(gòu)成,鏈表保證元素有序,Set保證元素唯一。
TreeSet:底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹,是一種自平衡的二叉樹。元素排序(是排序不是有序!)
排序分為自然排序和比較器排序。自然排序:元素具備比較性,元素所屬類實(shí)現(xiàn)接口Comparable即可,比如我們平常使用的Integer,String都已實(shí)現(xiàn)Comparable接口;比較器排序:如果元素是自定義類時(shí),需要按需求對(duì)元素進(jìn)行排序,比如按自定義類中的某個(gè)成員變量的大小進(jìn)行排序,此時(shí)需要集合接收一個(gè)Comparator的實(shí)現(xiàn)類對(duì)象,可采用匿名內(nèi)部類或外部類去重寫compare()方法。
Map<K,V>:
是一個(gè)接口,K是鍵 ,V是該鍵對(duì)應(yīng)的值,存儲(chǔ)的元素是鍵值對(duì),也就是成對(duì)存在的,存儲(chǔ)雙列元素。鍵不能重復(fù),每一個(gè)鍵最多映射一個(gè)值。
它的主要方法:
添加:V put(K key,V value) 刪除:V remove(K key,V value) 判斷:1).boolean containsKey(Object o):是否包含某個(gè)鍵;2).boolean containsValue(Object o):是否包含某個(gè)值;3).boolean isEmpty():是否為空 獲取:1) Set<K> keySet() 獲取所有鍵的視圖 2) V get(Object key) 返回改建對(duì)應(yīng)的值 3) int size() 獲得該集合的鍵值對(duì)的對(duì)數(shù)
Map集合的遍歷方式:
1)鍵找值:將所有的鍵獲取到一個(gè)集合Set中,再遍歷該集合獲取對(duì)應(yīng)的值
2)由鍵值對(duì)對(duì)象找鍵和值:獲取所有的鍵值對(duì)對(duì)象到集合中,再遍歷該集合獲得每一個(gè)鍵值對(duì)的鍵和值
Map常用的實(shí)現(xiàn)類與Set的實(shí)現(xiàn)類類似:
- Hashtable:類似HashSet,線程安全,效率低,被HashMap替代;
- HashMap:類似HashSet,線程不安全,效率高;
- LinkedHashMap:類似LinkedHashSet;
- TreeMap:類似SetMap
注意:Map集合的數(shù)據(jù)結(jié)構(gòu)僅對(duì)鍵有效,與值無關(guān)。
判斷使用哪個(gè)集合:
是否是鍵值對(duì)形式的元素?
是:Map
是否需要排序?
是:TreeMap
否:HashMap
否:Collection
是否唯一(或有序)
不唯一,有序:List
數(shù)據(jù)結(jié)構(gòu):數(shù)組:ArrayList(線程不安全,效率高);Vector(線程安全,效率低)
鏈表:LinkedList(線程不安全,效率高);
唯一,無序:Set
是否排序?
是:TreeSet
否:HashSet
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- JAVA集合框架工具類自定義Collections集合方法
- Java動(dòng)態(tài)獲取實(shí)現(xiàn)某個(gè)接口下所有的實(shí)現(xiàn)類對(duì)象集合
- Java判斷2個(gè)List集合是否相等(不考慮元素的順序)
- 2018版java多線程面試題集合及答案
- Java集合定義與用法實(shí)例總結(jié)【Set、List與Map】
- Java8中利用stream對(duì)map集合進(jìn)行過濾的方法
- java使用lambda表達(dá)式對(duì)List集合進(jìn)行操作技巧(JDK1.8)
- Java實(shí)現(xiàn)過濾掉map集合中key或value為空的值示例
- 詳細(xì)分析Java并發(fā)集合ArrayBlockingQueue的用法
- java拓展集合工具類CollectionUtils
相關(guān)文章
IntelliJ IDEA(2019)安裝破解及HelloWorld案例(圖文)
這篇文章主要介紹了IntelliJ IDEA(2019)安裝破解及HelloWorld案例(圖文),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Spring?IOC?xml方式進(jìn)行工廠Bean操作詳解
這篇文章主要介紹了Spring?IOC?xml方式進(jìn)行工廠Bean操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01使用Feign擴(kuò)展包實(shí)現(xiàn)微服務(wù)間文件上傳
這篇文章主要為大家詳細(xì)介紹了使用Feign擴(kuò)展包實(shí)現(xiàn)微服務(wù)間文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Spring @ComponentScan注解使用案例詳細(xì)講解
@ComponentScan注解的作用可以簡述為:將項(xiàng)目中所有被@Component注解直接或者間接標(biāo)記的類---->組裝成BeanDefinition---->然后以key=beanName, value=BeanDefinition的形式存儲(chǔ),為后續(xù)生成bean對(duì)象做準(zhǔn)備2023-03-03Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理(總結(jié))
這篇文章主要介紹了Java中實(shí)現(xiàn)多線程關(guān)鍵詞整理,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05java去除中文括號(hào)小括號(hào),或者英文括號(hào)的實(shí)例代碼
這篇文章主要介紹了java去除中文括號(hào)小括號(hào),或者英文括號(hào)的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)
JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)...2006-12-12