java集合基础复习
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
溫故知新,好一段學習時間過后到了收割的季節(jié)。
java中集合java.util包下的一個集合根接口collection,其子接口list和set,map接口定義key-value鍵值對。
ArrayList、linkedlist、vector實現(xiàn)了list接口。也稱線性集合。數(shù)據(jù)有序可重復。
ArrayList:底層實現(xiàn)的數(shù)組,線程不安全的,效率高,則查詢較,修改刪除插入較慢。
linkedlist:底層實現(xiàn)是數(shù)組,線程不安全的,效率低,插入,修改較快,查詢較慢。
Vector:線程安全的,效率低。它是stack的父類。
深層次分析:注意ArrayList的底層的數(shù)組擴容,linkedlist雙向鏈表的概念,第一個節(jié)點沒有上一個,最后一個節(jié)點沒有下一個。單向鏈表只有下一個沒有上一個,慢慢體會鏈表的思想,怎么找上一個,下一個,重點體會索引的處理。
----------------------------------------------------------------------
map:映射集合map,包含兩個部分key,value.其中key不得重復,所以它可以組成一個Set,而value部分可以重復可以組成一個Collection。key不能重復,value可以(上次看到set底層實現(xiàn)是map的key)
hashmap,treemap,hashtable,map的實現(xiàn)類。
注意hashmap和hashtable的區(qū)別,經(jīng)常問到面試題。
---hashmap線程不安全,效率高。(使用頻率最高的一種Map集合)
------hashmap可以接受null鍵值和值,而Hashtable則不能
---hashTable用法與HastMap集合基本相同,只是HashTable是比較老的類集,是線程安全的,所以效率較低。
------hashtable線程安全,效率低。
注意map和其他集合增加元素的方式不同,使用put(key,value);取元素時候使用get(key);通過key來取value。
map與其他集合不同是映射集合,其底層實現(xiàn)也不同,map底層實現(xiàn)是數(shù)組加鏈表,hashmap的存取實現(xiàn)存放數(shù)據(jù)時候通過先計算數(shù)據(jù)key的hash值,根據(jù)不同的hash值確定索引來存放在一個類型entry<key,vakue>名字叫table、大小16數(shù)組中,如果在遇到相同的hash值則以鏈表的形式數(shù)組索引后面進行連接(如果計算那個位置沒有索引則直接把entry對象放進去索引中,如果索引中有元素則進行迭代,一直到entry-next方法找下一個--->null的時候,則當前entry對象變成下一個節(jié)點)。
通過源碼可以知道
??? static class Node<K,V> implements Map.Entry<K,V> {};
??? transient Node<K,V>[] table;
首先map可以entry鍵值對進行映射所以可以通過entry來獲取鍵值對,并且節(jié)點中也可存放鍵值對,則可組成鏈表來進行存放數(shù)據(jù)。實現(xiàn)是紅黑樹算法的實現(xiàn)
treemap的實現(xiàn)是紅黑樹算法的實現(xiàn)。其底層是通過紅黑二叉樹來實現(xiàn)。
treemap如果可以排序,或者提供比較器實現(xiàn)ava.lang.comparable接口重寫?? ?compareTo方法。則可以排序。
---------------------------------------------
set集合元素無需不可重復。
實現(xiàn)類hashset,其中元素沒有下標,只能用迭代器來遍歷。
set是基于map實現(xiàn)的,其中map的中的key組成set。
---hsahset使用必須重寫equals和hashcode,其底層實現(xiàn)是hash表,進行存放數(shù)據(jù)時候先比較元素的hash值(因為hash值是唯一的),如果hash值相同那么在equals進行比較,因為set集合中元素不可重復這樣才保證了元素的不可重復性。
通過底層原理的理解,得出一個注意點:存放在Set中的元素的所在類必須重寫equals()方法和HashCode()方法。
?? ?
實現(xiàn)類TreeSet如果元素滿足自然排序,也就是實現(xiàn)Comparable<T> 接口,則可以進行排序。
------------------------------
常見面試題:
注意hashmap和hashtable的區(qū)別,經(jīng)常問到面試題。
hashmap線程不安全,效率高。(使用頻率最高的一種Map集合)
hashTable用法與HastMap集合基本相同,只是HashTable是比較老的類集,是線程安全的,所以效率較低。
hashtable線程安全,效率低。
常見數(shù)據(jù)結(jié)構(gòu)
?? ??? ?A:棧 先進后出
?? ??? ?B:隊列 先進先出
?? ??? ?C:數(shù)組 查詢快,增刪慢
?? ??? ?D:鏈表 查詢慢,增刪快
List的子類特點(面試題)
?? ??? ?ArrayList
?? ??? ??? ?底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。
?? ??? ??? ?線程不安全,效率高。
?? ??? ?Vector
?? ??? ??? ?底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,查詢快,增刪慢。
?? ??? ??? ?線程安全,效率低。
?? ??? ?LinkedList
?? ??? ??? ?底層數(shù)據(jù)結(jié)構(gòu)是鏈表,查詢慢,增刪快。
?? ??? ??? ?線程不安全,效率高。
轉(zhuǎn)載于:https://my.oschina.net/hp2017/blog/1560085
總結(jié)
以上是生活随笔為你收集整理的java集合基础复习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 肠镜复查多久(肠镜是怎么检查的)
- 下一篇: 华三无线三层网络注册配置方法 华三三层路