Set和List的區(qū)別
-
Set 接口實例存儲的是無序的,不重復(fù)的數(shù)據(jù)。List 接口實例存儲的是有序的,可以重復(fù)的元素。
-
Set 檢索效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變 <實現(xiàn)類有HashSet,TreeSet>。
-
List 和數(shù)組類似,可以動態(tài)增長,根據(jù)實際存儲的數(shù)據(jù)的長度自動增長 List 的長度。查找元素效率高,插入刪除效率低,因為會引起其他元素位置改變 <實現(xiàn)類有ArrayList,LinkedList,Vector> 。
集合實現(xiàn)
1.ArrayList
該類也是實現(xiàn)了List的接口,實現(xiàn)了可變大小的數(shù)組,隨機訪問和遍歷元素時,提供更好的性能。該類也是非同步的,在多線程的情況下不要使用。ArrayList 增長當(dāng)前長度的50%,插入刪除效率低。
2.HashSet
該類實現(xiàn)了Set接口,不允許出現(xiàn)重復(fù)元素,不保證集合中元素的順序,允許包含值為null的元素,但最多只能一個。
3.HashMap
HashMap 是一個散列表,它存儲的內(nèi)容是鍵值對(key-value)映射。
該類實現(xiàn)了Map接口,根據(jù)鍵的HashCode值存儲數(shù)據(jù),具有很快的訪問速度,最多允許一條記錄的鍵為null,不支持線程同步。
常用的java.util包中的定義類
1、Vector
該類和ArrayList非常相似,但是該類是同步的,可以用在多線程的情況,該類允許設(shè)置默認的增長長度,默認擴容方式為原來的2倍。
2、Stack
棧是Vector的一個子類,它實現(xiàn)了一個標(biāo)準的后進先出的棧。
3、Dictionary
Dictionary 類是一個抽象類,用來存儲鍵/值對,作用和Map類相似。
4、Hashtable
Hashtable 是 Dictionary(字典) 類的子類,位于 java.util 包中。
5、Properties
Properties 繼承于 Hashtable,表示一個持久的屬性集,屬性列表中每個鍵及其對應(yīng)值都是一個字符串。
6、BitSet
一個Bitset類創(chuàng)建一種特殊類型的數(shù)組來保存位值。BitSet中數(shù)組大小會隨需要增加。
ArrayList
ArrayList 類是一個可以動態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。
ArrayList 繼承了 AbstractList ,并實現(xiàn)了 List 接口。
ArrayList使用樣例
LinkedList
鏈表(Linked list)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會按線性的順序存儲數(shù)據(jù),而是在每一個節(jié)點里存到下一個節(jié)點的地址。
鏈表可分為單向鏈表和雙向鏈表。
一個單向鏈表包含兩個值: 當(dāng)前節(jié)點的值和一個指向下一個節(jié)點的鏈接。
LinkedList的用法示例
一個雙向鏈表有三個整數(shù)值: 數(shù)值、向后的節(jié)點鏈接、向前的節(jié)點鏈接。
Java LinkedList(鏈表) 類似于 ArrayList,是一種常用的數(shù)據(jù)容器。
與 ArrayList 相比,LinkedList 的增加和刪除的操作效率更高,而查找和修改的操作效率較低。
以下情況使用 ArrayList :
- 頻繁訪問列表中的某一個元素。
- 只需要在列表末尾進行添加和刪除元素操作。
以下情況使用 LinkedList :
你需要通過循環(huán)迭代來訪問列表中的某些元素。
需要頻繁的在列表開頭、中間、末尾等位置進行添加和刪除元素操作。
-
LinkedList 繼承了 AbstractSequentialList 類。
-
LinkedList 實現(xiàn)了 Queue 接口,可作為隊列使用。
-
LinkedList 實現(xiàn)了 List 接口,可進行列表的相關(guān)操作。
-
LinkedList 實現(xiàn)了 Deque 接口,可作為隊列使用。
-
LinkedList 實現(xiàn)了 Cloneable 接口,可實現(xiàn)克隆。
-
LinkedList 實現(xiàn)了 java.io.Serializable 接口,即可支持序列化,能通過序列化去傳輸。
Java HashSet
HashSet 基于 HashMap 來實現(xiàn)的,是一個不允許有重復(fù)元素的集合。
HashSet 允許有 null 值。
HashSet 是無序的,即不會記錄插入的順序。
HashSet 不是線程安全的, 如果多個線程嘗試同時修改 HashSet,則最終結(jié)果是不確定的。 您必須在多線程訪問時顯式同步對 HashSet 的并發(fā)訪問。
HashSet 實現(xiàn)了 Set 接口。
HashSet示例展示
Java HashMap
HashMap 是一個散列表,它存儲的內(nèi)容是鍵值對(key-value)映射。
HashMap 實現(xiàn)了 Map 接口,根據(jù)鍵的 HashCode 值存儲數(shù)據(jù),具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。
HashMap 是無序的,即不會記錄插入的順序。文章來源:http://www.zghlxwxcb.cn/news/detail-696525.html
HashMap 繼承于AbstractMap,實現(xiàn)了 Map、Cloneable、java.io.Serializable 接口。
HashMap的示例文章來源地址http://www.zghlxwxcb.cn/news/detail-696525.html
到了這里,關(guān)于Java 數(shù)據(jù)結(jié)構(gòu)使用學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!