本文目錄一覽:
昆明java培訓學校告訴你Java集合框架的知識總結?
說明:先從整體介紹了Java集合框架包含的介面和類,然後雲南IT培訓總結了集合框架中的一些基本知識和關鍵點,並結合實例進行簡單分析。
1、綜述
所有集合類都位於java.util包下。集合中只能保存對象(保存對象的引用變數)。(數組既可以保存基本類型的數據也可以保存對象)。
當我們把一個對象放入集合中後,系統會把所有集合元素都當成Object類的實例進行處理。從JDK1.5以後,這種狀態得到了改進:可以使用泛型來限制集合里元素的類型,並讓集合記住所有集合元素的類型(參見具體泛型的內容)。
Java的集合類主要由兩個介面派生而出:Collection和Map,Collection和Map是Java集合框架的根介面,這兩個介面又包含了一些介面或實現類。
Set、List和Map可以看做集合的三大類。
List集合是有序集合,集合中的元素可以重複,訪問集合中的元素可以根據元素的索引來訪問。
Set集合是無序集合,集合中的元素不可以重複,訪問集合中的元素只能根據元素本身來訪問(也是不能集合里元素不允許重複的原因)。
Map集合中保存Key-value對形式的元素,訪問時只能根據每項元素的key來訪問其value。
對於Set、List和Map三種集合,最常用的實現類分別是HashSet、ArrayList和HashMap三個實現類。(並發控制的集合類,以後有空研究下)。
2、Collection介面
Collection介面是List、Set和Queue介面的父介面,同時可以操作這三個介面。
Collection介面定義操作集合元素的具體方法大家可以參考API文檔,這裡通過一個例子來說明Collection的添加元素、刪除元素、返回集合中元素的個數以及清空集合元素的方法。
3、兩種遍歷集合的方法Iterator介面和foreach循環 1、Iterator介面
Iterator也是Java集合框架的成員,主要用於遍歷(即迭代訪問)Collection集合中的元素,也稱為迭代器。
簡敘java的集合框架,常見集合的特點有哪些
集合主要有Collection和Map介面。
List特點:元素有放入順序,元素可重複
Map特點:元素按鍵值對存儲,無放入順序
Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)
List介面有三個實現類:LinkedList,ArrayList,Vector
LinkedList:底層基於鏈表實現,鏈表內存是散亂的,每一個元素存儲本身內存地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢
ArrayList和Vector的區別:ArrayList是非線程安全的,效率高;Vector是基於線程安全的,效率低
Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet
SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現)
Query介面有一個實現類:LinkList
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap
HashMap非線程安全,高效,支持null;HashTable線程安全,低效,不支持null
SortedMap有一個實現類:TreeMap
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,存儲的是鍵值對
set
一般無序不重複.map
kv
結構
list
有序
。
有用請採納,謝謝
Java五個最常用的集合類之間的區別和聯繫
常用的集合類有一下幾種:
List結構的集合類:ArrayList類,LinkedList類,Vector類,Stack類
Map結構的集合類:HashMap類,Hashtable類
Set結構的集合類:HashSet類,TreeSet類
Queue結構的集合:Queue介面
HashMap和Hashtable的區別:
HashMap和Hashtable都是java的集合類,都可以用來存放java對象,這是他們的相同點
以下是他們的區別:
1.歷史原因:
Hashtable是基於陳舊的Dictionary類的,HashMap是java 1.2引進的Map介面的一個現實。
2.同步性:
Hashtable是同步的,這個類中的一些方法保證了Hashtable中的對象是線程安全的,而HashMap則是非同步的,因此HashMap中的對象並不是線程安全的,因為同步的要求會影響執行的效率,所以如果你不需要線程安全的結合那麼使用HashMap是一個很好的選擇,這樣可以避免由於同步帶來的不必要的性能開銷,從而提高效率,我們一般所編寫的程序都是非同步的,但如果是伺服器端的代碼除外。
3.值:
HashMap可以讓你將空值作為一個表的條目的key或value
Hashtable是不能放入空值(null)的
ArrayList和Vector的區別:
ArrayList與Vector都是java的集合類,都是用來存放java對象,這是他們的相同點,
區別:
1.同步性:
Vector是同步的,這個類的一些方法保證了Vector中的對象的線程安全的,而ArrayList則是非同步的,因此ArrayList中的對象並不 是線程安全的,因為同步要求會影響執行的效率,所以你不需要線程安全的集合那麼使用ArrayList是一個很好的選擇,這樣可以避免由於同步帶來的不必 要的性能開銷。
2.數據增長:
從內部實現的機制來講,ArrayList和Vector都是使用數組(Array)來控制集合中的對象,當你向兩種類型中增加元素的時候,如果元素的數目超過了內部數組目前的長度他們都需要擴展內部數組的長度,Vector預設情況下自動增長原來一倍的數組長度,ArrayList是原來的50%,所以最後你獲得的這個集合所佔的空間總是比你實際需要的要大,所以如果你要在集合中保存大量的數據,那麼使用Vector有一些優勢,因為你可以通過設置集合的初始大小來避免不必要的資源開銷。
總結:
1)如果要求線程安全,使用Vector,Hashtable
2)如果不要求線程安全,使用ArrayList,LinkedList,HashMap
3)如果要求鍵值對,則使用HashMap,Hashtable
4)如果數據量很大,又要求線程安全考慮Vector
1.ArrayList: 元素單個,效率高,多用於查詢
2.Vector: 元素單個,線程安全,多用於查詢
3.LinkedList:元素單個,多用於插入和刪除
4.HashMap: 元素成對,元素可為空
5.HashTable: 元素成對,線程安全,元素不可為空
ArrayList
底層是Object數組,所以ArrayList具有數組的查詢速度快的優點以及增刪速度慢的缺點。
而在LinkedList的底層是一種雙向循環鏈表。在此鏈表上每一個數據節點都由三部分組成:前指針(指向前面的節點的位置),數據,後指針(指向後面的節點的位置)。最後一個節點的後指針指向第一個節點的前指針,形成一個循環。
雙向循環鏈表的查詢效率低但是增刪效率高。
ArrayList和LinkedList在用法上沒有區別,但是在功能上還是有區別的。
LinkedList
經常用在增刪操作較多而查詢操作很少的情況下:隊列和堆棧。
隊列:先進先出的數據結構。
棧:後進先出的數據結構。
注意:使用棧的時候一定不能提供方法讓不是最後一個元素的元素獲得出棧的機會。
Vector
(與ArrayList相似,區別是Vector是重量級的組件,使用使消耗的資源比較多。)
結論:在考慮並發的情況下用Vector(保證線程的安全)。
在不考慮並發的情況下用ArrayList(不能保證線程的安全)。
面試經驗(知識點):
java.util.stack(stack即為堆棧)的父類為Vector。可是stack的父類是最不應該為Vector的。因為Vector的底層是數組,且Vector有get方法(意味著它可能訪問到並不屬於最後一個位置元素的其他元素,很不安全)。
對於堆棧和隊列只能用push類和get類。
Stack類以後不要輕易使用。
實現棧一定要用LinkedList。
(在JAVA1.5中,collection有queue來實現隊列。)
Set-HashSet實現類:
遍歷一個Set的方法只有一個:迭代器(interator)。
HashSet中元素是無序的(這個無序指的是數據的添加順序和後來的排列順序不同),而且元素不可重複。
在Object中除了有finalize(),toString(),equals(),還有hashCode()。
HashSet底層用的也是數組。
當向數組中利用add(Object o)添加對象的時候,系統先找對象的hashCode:
int hc=o.hashCode(); 返回的hashCode為整數值。
Int I=hc%n;(n為數組的長度),取得餘數後,利用餘數向數組中相應的位置添加數據,以n為6為例,如果I=0則放在數組a[0]位置,如果I=1,則 放在數組a[1]位置。如果equals()返回的值為true,則說明數據重複。如果equals()返回的值為false,則再找其他的位置進行比 較。這樣的機制就導致兩個相同的對象有可能重複地添加到數組中,因為他們的hashCode不同。
如果我們能夠使兩個相同的對象具有相同hashcode,才能在equals()返回為真。
在實例中,定義student對象時覆蓋它的hashcode。
因為String類是自動覆蓋的,所以當比較String類的對象的時候,就不會出現有兩個相同的string對象的情況。
現在,在大部分的JDK中,都已經要求覆蓋了hashCode。
結論:如將自定義類用hashSet來添加對象,一定要覆蓋hashcode()和equals(),覆蓋的原則是保證當兩個對象hashcode返回相同的整數,而且equals()返回值為True。
如果偷懶,沒有設定equals(),就會造成返回hashCode雖然結果相同,但在程序執行的過程中會多次地調用equals(),從而影響程序執行的效率。
什麼是java中的集合框架
集合框架是為表示和操作集合而規定的一種統一的標準的體系結構。任何集合框架都包含三大塊內容:對外的介面、介面的實現和對集合運算的演算法。
介面:即表示集合的抽象數據類型。介面提供了讓我們對集合中所表示的內容進行單獨操作的可能。
實現:也就是集合框架中介面的具體實現。實際它們就是那些可復用的數據結構。
演算法:在一個實現了某個集合框架中的介面的對象身上完成某種有用的計算的方法,例如查找、排序等。這些演算法通常是多態的,因為相同的方法可以在同一個介面被多個類實現時有不同的表現。事實上,演算法是可復用的函數。如果你學過C++,那C++中的標準模版庫(STL)你應該不陌生,它是眾所周知的集合框架的絕好例子。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192247.html