首頁 Java java教程 Java中的Set、List、Map的用法與區別介紹

Java中的Set、List、Map的用法與區別介紹

Jan 22, 2017 pm 03:19 PM

Collection 介面 :Collection是最基本的集合接口,聲明了適用於JAVA集合(只包括Set和List)的通用方法。 Set和List都繼承了Conllection,Map

Collection介面的方法:

boolean add(Object o):向集合中加入一個物件的參考
void clear():刪除集合中所有的對象,即不再持有這些物件的參考
boolean isEmpty():判斷集合是否為空
boolean contains(Object o):判斷集合中是否持有特定物件的參考
Iterartor iterator():傳回一個Iterator對象,可以用來遍歷集合中的元素
boolean remove(Object o):從集合中刪除物件的參考

int size():傳回集合中元素的陣列

Object[] toArray():傳回一個陣列,該陣列中包含集合中的所有元素

關於:Iterator() 和toArray() 方法都用於集合的所有的元素,前者返回一個Iterator對象,後者返回一個包含集合中所有元素的數組。

Iterator介面宣告瞭如下方法:

hasNext():判斷集合中元素是否遍歷完畢,如果沒有,就回傳true
next():傳回下一個元素
remove():從集合中刪除上一個有next()方法傳回的元素。

Set(集合):Set是最簡單的一種集合。集合中的物件不按特定的方式排序,並且沒有重複物件。 Set介面主要實作了兩個實作類別:

HashSet:HashSet類別依照雜湊演算法來存取集合中的對象,存取速度比較快

TreeSet:TreeSet類別實作了SortedSet接口,能夠對集合中的對象進行排序。

Set的用法:存放的是物件的引用,沒有重複物件

Set set=new HashSet();
String s1=new String("hello");
String s2=s1;
String s3=new String("world");
set.add(s1);
set.add(s2);
set.add(s3);
登入後複製

System.out.println(set.size());//列印集合中物件的數目為 2。
Set 的 add()方法是如何判斷物件是否已經存放在集合中?

boolean isExists=false;
Iterator iterator=set.iterator();
while(it.hasNext()) {
String oldStr=it.next();
if(newStr.equals(oldStr)){
isExists=true;
}
}
登入後複製

List(列表):List的特徵是其元素以線性方式存儲,集合中可以存放重複物件。

List介面主要實作類別包括:
ArrayList() : 代表長度可以改變得數組。可以對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢。
LinkedList(): 在實作中採用鍊錶資料結構。插入和刪除速度快,存取速度慢。

對於List的隨機存取來說,就是只隨機來檢索位於特定位置的元素。 List 的 get(int index)方法放回集合中由參數index指定的索引位置的對象,下標從「0」 開始。最基本的兩種檢索集合中的所有物件的方法:

1:for循環和get()方法:

for(int i=0; i<list.size();i++){
System.out.println(list.get(i));
}
登入後複製

2:使用迭代器(Iterator):

Iterator it=list.iterator();
while(it.hashNext){
System.out.println(it.next);
}
登入後複製

Map(映射): Map是一種把鍵物件和值物件映射的集合,它的每個元素都包含一對鍵物件和值物件。
Map沒有繼承於Collection介面 從Map集合中檢索元素時,只要給出鍵對象,就會傳回對應的值物件。

Map 的常用方法:

1 添加,刪除操作:

Object put(Object key, Object value): 在集合中加入元素
Object remove(Object key): 刪除與KEYvo相關的元素
id put( Map t):  將來自特定映像的所有元素新增至該映像
void clear():從映像中刪除所有映射

2 查詢操作:

Object get(Object key):取得與關鍵字key相關的值。 Map集合中的鍵物件不允許重複,也就說,任兩個鍵物件透過equals()方法比較的結果都是false.,但是可以將任意多個鍵獨享映射到同一個值物件上。

Conllections:集合實用類別 。 Conllections提供了供JAVA集合實用的靜態方法

總結:

JAVA集合的基本用法,都歸納了,上面這些是平常最常用的JAVA集合,具體的其他的,還要參考JDK幫助文檔了,呵呵關於Map的應用,還有很多,具體就是這個,Conllections提供了很多List /Map 實用的方法,對平常開發非常有用。

boolean containsKey(Object key): 判斷映像中是否存在關鍵字key
boolean containsValue(Object value):判斷映像中是否存在值value
int size():傳回目前映像中對應的數量
boolean isEmpty() :判斷映像中是否有任何映射

List按對象進入的順序保存對象,不做排序或編輯操作。 Set對每個物件只接受一次,並使用自己內部的排序方法(通常,你只關心某個元素是否屬於 Set,而不關心它的順序--否則應該使用List)。
Map同樣對每個元素保存一份,但這是基於"鍵"的,Map也有內建的排序,因而不關心元素添加的 順序。如果加入元素的順序對你很重要,應該使用LinkedHashSet或LinkedHashMap.

List的功能方法:
其實有兩種:一種是基本的ArrayList,其優點在於隨機存取元素,另一種是更強大的LinkedList,它並不是為快速隨機存取設計的,而是具有一套更通用的方法。

List:次序是List最重要的特點:它保證維護元素特定的順序。 List為Collection增加了許多方法,使得能夠在List中間插入與移除元素(這只推薦LinkedList使用。)一個List可以產生ListIterator,使用它可以從兩個方向遍歷List,也可以從List中間插入和移除元素。
ArrayList:由陣列實作的List。允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。 ListIterator只應該用來由後向前遍歷 ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷大很多。
LinkedList:對順序存取進行了最佳化,向List中間插入與刪除的開銷並不大。隨機存取則相對較慢。 (使用ArrayList代替。)還具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和removeLast(), 這些方法(沒有在任何接口或基類中定義過)使得LinkedList可以當作堆疊、佇列和雙向佇列使用。

Set的功能方法:
Set具有與Collection完全一樣的接口,因此沒有任何額外的功能,不像前面有兩個不同的L​​ist。實際上Set就是Collection,只 是行為不同。 (這是繼承與多態思想的典型應用:表現不同的行為。)Set不保存重複的元素(至於如何判斷元素相同則較為負責)

Set : 存入Set的每個元素都必須是唯一的,因為Set不保存重複元素。加入Set的元素必須定義equals()方法以確保物件的唯一性。 Set與Collection有完全一樣的介面。 Set介面不保證維護元素的次序。
HashSet:為快速找出設計的Set。存入HashSet的物件必須定義hashCode()。
TreeSet:保存次序的Set, 底層為樹狀結構。使用它可以從Set中提取有序的序列。

LinkedHashSet:具有HashSet的查詢速度,且內部使用鍊錶維護元素的順序(插入的次序)。於是在使用迭代器遍歷Set時,結果會依元素插入的順序顯示。

Map的功能方法:

方法put(Object key, Object value)增加一個「值」(想要得東西)和與「值」相關聯的「鍵」(key)(使用它來查找)。方法get(Object key)傳回與給定「鍵」相關聯的「值」。可以用containsKey()和containsValue()測試Map中是否包含某個「鍵」或「值」。
標準的Java類別庫中包含了幾種不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它們都有相同的基本介面Map,但是行為、效率、排序策略、保存物件的生命週期和判定「鍵」等價的策略等各不相同。
執行效率是Map的一大問題。看看get()要做哪些事,就會明白為什麼在ArrayList中搜尋「鍵」是相當慢的。而這正是HashMap提高速 度的地方。 HashMap使用了特殊的值,稱為「散列碼」(hash code),來取代對鍵的緩慢搜尋。
「散列碼」是「相對唯一」用以代表物件的int值,它是透過將該物件的某些資訊進行轉換而產生的。所有Java物件都能產生雜湊碼,因為hashCode()是定義在基底類別Object中的方法。
HashMap就是使用物件的hashCode()進行快速查詢的。此方法能夠顯著提高效能。

Map : 維護「鍵值對」的關聯性,讓你可以透過「鍵」找出「值」

HashMap:Map基於散列表的實作。插入和查詢「鍵值對」的開銷是固定的。可以透過構造器設定容量capacity和負載因子load factor,以調整容器的效能。
LinkedHashMap:類似HashMap,但是迭代遍歷它時,取得「鍵值對」的順序是其插入次序,或是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代存取時發而更快,因為它使用鍊錶來維護內部次序。
TreeMap :基於紅黑樹資料結構的實作。當查看「鍵」或「鍵值對」時,它們會被排序(順序由Comparabel或Comparator決定)。 TreeMap的特徵在 於,你得到的結果是經過排序的。 TreeMap是唯一的帶有subMap()方法的Map,它可以傳回一個子樹。
WeakHashMap :弱鍵(weak key)Map,Map中使用的物件也被允許釋放: 這是為解決特殊問題設計的。如果沒有map之外的引用指向某個“鍵”,則此“鍵”可以被垃圾收集器回收。

IdentifyHashMap:使用==代替equals()對「鍵」進行比較的hash map。專為解決特殊問題而設計。

更多Java中的Set、List、Map的用法與區別介紹相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1668
14
CakePHP 教程
1426
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
公司安全軟件導致應用無法運行?如何排查和解決? 公司安全軟件導致應用無法運行?如何排查和解決? Apr 19, 2025 pm 04:51 PM

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

如何將姓名轉換為數字以實現排序並保持群組中的一致性? 如何將姓名轉換為數字以實現排序並保持群組中的一致性? Apr 19, 2025 pm 11:30 PM

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

如何使用MapStruct簡化系統對接中的字段映射問題? 如何使用MapStruct簡化系統對接中的字段映射問題? Apr 19, 2025 pm 06:21 PM

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? Apr 19, 2025 pm 11:45 PM

在使用IntelliJIDEAUltimate版本啟動Spring...

如何優雅地獲取實體類變量名構建數據庫查詢條件? 如何優雅地獲取實體類變量名構建數據庫查詢條件? Apr 19, 2025 pm 11:42 PM

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對像如何安全地轉換為數組? Java對像如何安全地轉換為數組? Apr 19, 2025 pm 11:33 PM

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? 電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? Apr 19, 2025 pm 11:27 PM

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

如何利用Redis緩存方案高效實現產品排行榜列表的需求? 如何利用Redis緩存方案高效實現產品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

See all articles