Set 介面
Set 介面的特性為裏面的物件不會重複。
HastSet
HastSet 使用 HashCode 來判斷物件是否相同,如果相同則新物件會覆蓋舊物件,所以 HashSet 裏的物件不會重複,且無順序性,無排序性。
HashCode (雜湊碼) 是一種數學演算法,HashSet 使用 HashCode 決定物件要存放的位置。所以在大量的資料中要查找某個物件,使用 HashSet 是個效能非常高的方式。
🔒 完整內容請註冊並登入會員。
免費註冊登入LinkedHashSet
LinkedHashSet 也是使用 HashCode 決定物件存放的位置,但多了雙向連結記錄上下物件,所以具順序性,無排序,不允許重複,新增修改的效能略遜於 HashSet (因為要加雙向連結)。
🔒 完整內容請註冊並登入會員。
免費註冊登入若要將 HashSet 依加入的順序取出的話,可轉為 LinkedHashSet 類型,如下所示。
HashSet hs=new HashSet();
LinkedHashSet lhs=new LinkedHashSet(hs);
TreeSet
TreeSet 不是使用 HashCode 來判斷物件是否重覆,它是繼承 SortedSet,使用二元樹排序,一樣重複的物件會覆蓋舊物件,具排序性,無順序性,不可重複,新增修改的效能是最差的。
Queue 介面
Queue 具先進先出原則,但不要使用 add、remove 方法,因為會丟出例外。需改採 offer、poll、peek 三個方法。
LinkedList
LinkedList 除了實作 List 介面外,還實作了 Queue 介面,所以 LinkedList 除了可以當作 List 來使用,也可以當成 Queue。
Queue q=new LinkedList();
q.offer("First");
q.poll();
PriorityQueue
是一個可以自訂排序方式的類別,排序時先實作 Comparator 裏的 compare()方法,再將產生的物件放入PriorityQueue 建構子。
🔒 完整內容請註冊並登入會員。
免費註冊登入注意, String s=”abcd”;
s.compare(“defg”); 先一個字一個字比, 若前面比較小, 傳回負數, 前面比較大, 傳回正數, 二個都一樣, 傳回 0
Iterator
for-each 遍訪所有元素比較簡潔,但無法在迴圈中刪除資料,否則會發生 ConcurrentModificationException 例外。
使用 Iterator 遍訪所有元素時,可以在迴圈中安全的刪除修改元素,比較適合邊走邊修改的需求。
