本文目錄一覽:
求大神,java的集合框架是什麼意思?
Java平台提供了一個全新的集合框架。「集合框架」主要由一組用來操作對象的介面組成。不同介面描述一組不同數據類型。
Java 2集合框架圖
集合介面:6個介面(短虛線表示),表示不同集合類型,是集合框架的基礎。
抽象類:5個抽象類(長虛線表示),對集合介面的部分實現。可擴展為自定義集合類。
實現類:8個實現類(實線表示),對介面的具體實現。
在很大程度上,一旦您理解了介面,您就理解了框架。雖然您總要創建介面特定的實現,但訪問實際集合的方法應該限制在介面方法的使用上;因此,允許您更改基本的數據結構而不必改變其它代碼。
· Collection 介面是一組允許重複的對象。
· Set 介面繼承 Collection,但不允許重複,使用自己內部的一個排列機制。
· List 介面繼承 Collection,允許重複,以元素安插的次序來放置元素,不會重新排列。
· Map介面是一組成對的鍵-值對象,即所持有的是key-value pairs。Map中不能有重複的key。擁有自己的內部排列機制。
· 容器中的元素類型都為Object。從容器取得元素時,必須把它轉換成原來的類型。
Java 2簡化集合框架圖
集合介面
1.Collection 介面
用於表示任何對象或元素組。想要儘可能以常規方式處理一組元素時,就使用這一介面。
(1) 單元素添加、刪除操作:
boolean add(Object o):將對象添加給集合
boolean remove(Object o): 如果集合中有與o相匹配的對象,則刪除對象o
(2) 查詢操作:
int size() :返回當前集合中元素的數量
boolean isEmpty() :判斷集合中是否有任何元素
boolean contains(Object o) :查找集合中是否含有對象o
Iterator iterator() :返回一個迭代器,用來訪問集合中的各個元素
(3) 組操作 :作用於元素組或整個集合
boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素
boolean addAll(Collection c) : 將集合c 中所有元素添加給該集合
void clear(): 刪除集合中所有元素
void removeAll(Collection c) : 從集合中刪除集合c 中的所有元素
void retainAll(Collection c) : 從集合中刪除集合c 中不包含的元素
(4) Collection轉換為Object數組 :
Object[] toArray() :返回一個內含集合所有元素的array
Object[] toArray(Object[] a) :返回一個內含集合所有元素的array。運行期返回的array和參數a的型別相同,需要轉換為正確型別。
JAVA的集合框架中有那些類,他們都有那些區別
區別詳解,沒法詳解,數據結構就夠研究幾個月的,不過要是把目標放在會用上,就容易多了,也無需了解底層,看看API文檔,知道什麼方法是幹什麼的會用就行了。
集合類巨多無比,其實常用的也就這麼幾個,其他的都不用太看,你就看看:ArrayList、LinkedList、HashMap、TreeMap、HashSet 就行了,我理解也有限,簡單說一下這幾個:
Collection下面有List和Set,List有ArrayList、LinkedList,ArrayList底層以Object類型數組實現,特點是查找很快,增加或刪除操作很慢,這是由於數組的特點決定的,查找的時候因為有下標,所以你查第一個和查第1000個速度是一樣的,直接就定位過去了,但是刪除或者增加內容時,假如說一個ArrayList裡面有1000個元素,現在把第一個元素刪掉,那就出問題了,從第2個一直到第1000個元素都要
往前移動一個位置,這種移動是非常耗時而且效率是極其低下的。
LinkedList底層是以雙向循環鏈表實現的,特點是查找很慢,但是增加和刪除操作很快,雙向循環鏈表裡面所有元素都是一個一個連在一起的,查找第1000個,就要從第1個開始找到第2個,然後第3個….
但是刪除的時候,直接吧元素就刪了,前後的兩個元素之間在連起來,ok 了。
TreeMap,特點是按照key的升序保存鍵值對,因此插入的時候效率理論上稍慢寫。
HashMap、HashSet,HashSet底層以HashMap實現,HashMap底層以數組實現,當向集合HashSet中使用add方法增加元素的時候,其實會向HashMap中增加一行(key-value),這個key就是增加到Set中的對象,value是一個Object對象,首先調用key的hashCode方法返回一個HashCode值,注意這並不是真正的物理地址,通過將這個值進行散列運算,得到一個int型的數,然後利用此數和數組的長度計算出一個數組的下標值,看看這個位置上有沒有一個對象,如果沒有直接增加進去一個Entry對象,如果有,那麼接著將準備增加到集合中的key與該位置上的對象的key進行equals方法比較,如果該equals方法返回true,說明兩個key的內容相同,會用新的value將舊的value替換掉,put方法會返回這個被替換掉的value,如果equals方法返回false,會調用當前位置上存在的那個Entry對象的next屬性,尋找下一個Entry對象根這個Entry對象的key再進行equals比較…..
Vector和HashTable兩個已經過時了,內部public方法都是同步的,所以效率極其低下,淘汰了,不過面試老考,鬱悶。
java集合類框架中類的組織結構,並說明它們之間的聯繫與區別。
結構圖一樓給出來了,
聯繫:list是可重複的有順序的;set是不重複的無序的;map中的key是不重複的,value是和key一一對應的。
區別:
1. ArrayList是用動態數組實現的,有數組隨機訪問的優點,但插入和刪除操作過多時效率低;LinkedList是用雙向鏈表實現的,插入和刪除操作效率高,但隨機訪問數據不如ArrayList速度快。
2. HashSet是用散列實現的,TreeSet是用紅黑樹(基於二叉平衡樹的變種)實現的,
TreeSet是有序的(這可能與數學中純粹的集合概念不一致,但似乎這世上本就沒有純粹的東西吧),所以放入TreeSet中的對象必須是可比較的,即實現Compareble介面。
3. HashMap和TreeMap,與HashSet、TreeSet類似。
JAVA集合框架的總結
1.數組把對象和數字形式的下標聯繫起來。它持有的是類型確定的對象,這樣提取對象的時候就不用再作類型傳遞了。它可以是多維的,也可以持有primitive。但是創建之後它的容量不能改了。
2.Collection持有單個元素,而Map持有相關聯的pair。
3.和數組一樣,List也把數字下標同對象聯繫起來,你可以把數組和List想成有序的容器。List會隨元素的增加自動調整容量。但是List只能持有Objectreference,所以不能存放primitive,而且把Object提取出來之後,還要做類型傳遞。
4.如果要做很多隨機訪問,那麼請用ArrayList,但是如果要再List的中間做很多插入和刪除的話,就應該用LinkedList了。
5.LinkedList能提供隊列,雙向隊列和棧的功能。
6.Map提供的不是對象與數組的關聯,而是對象和對象的關聯。
HashMap看重的是訪問速度,而TreeMap看重鍵的順序,因而它不如HashMap那麼快。而LinkedHashMap則保持對象插入的順序,但是也可以用LRU演算法為它重新排序。
7.Set只接受不重複的對象。HashSet提供了最快的查詢速度。而TreeSet則保持元素有序。LinkedHashSet保持元素的插入順序。
8.沒必要再在新代碼里使用舊類庫留下來的Vector,Hashtable和Stack了。
容器類庫是你每天都會用到的工具,它能使程序更簡潔,更強大並且更高效。
隨著Java的進一步完善,它的功能和易用性也得到提高,我有理由相信Java在計算機語言中所佔的位置也會更加牢固,讓喜愛Java的人更加喜愛它。祝願Java一路順風!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/308470.html