同 HashSet 與 HashMap 的關(guān)系一樣,本篇文章所介紹的 LinkedHashSet 和 LinkedHashMap 也是一致的。在 JDK 集合框架中,類似 Set 集合通常都是由對應(yīng)的 Map 類集合來實現(xiàn)的(TreeSet 和 TreeMap 同理),這里很重要的一個理論就是:Set 類集合是不允許重復(fù)的,而 Map 類集合的 key 也是不允許重復(fù)的,所以通常很容易就用 Map 類集合實現(xiàn)了 Set 類集合。
1、LinkedHashSet 定義
LinkedHashSet 是由 LinkedHashMap 實現(xiàn)的集合。元素有序且不能重復(fù)。
public class LinkedHashSet< E >
extends HashSet< E >
implements Set< E >, Cloneable, java.io.Serializable {
看上圖類定義,LinkedHashSet 是由 HashSet 來實現(xiàn)的,其實底層是通過 LinkedHashMap 來實現(xiàn)的。
2、構(gòu)造函數(shù)
在 LinkedHashSet 中,有如下幾個構(gòu)造方法:
①、指定初始容量和加載因子
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
②、指定初始容量
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
③、默認(rèn)無參構(gòu)造函數(shù)
public LinkedHashSet() {
super(16, .75f, true);
}
④、構(gòu)造包含指定集合的元素
public LinkedHashSet(Collection< ? extends E > c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
上面所有的構(gòu)造方法,都調(diào)用父類,也就是 HashSet 的 super(initialCapacity, loadFactor, true);
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap< >(initialCapacity, loadFactor);
}
前面兩個參數(shù)分別設(shè)置HashMap 的初始容量和加載因子。dummy 可以忽略掉,這個參數(shù)只是為了區(qū)分 HashSet 別的構(gòu)造方法。
3、添加元素
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
通過 map.put() 方法來添加元素,說明了該方法如果新插入的key不存在,則返回null,如果新插入的key存在,則返回原key對應(yīng)的value值(注意新插入的value會覆蓋原value值)。
也就是說 add(E e) 方法,會將 e 作為 key,PRESENT 作為 value 插入到 map 集合中,如果 e 不存在,則插入成功返回 true;如果存在,則返回false。
4、刪除元素
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
調(diào)用 HashMap 的remove(Object o) 方法,該方法會首先查找 map 集合中是否存在 o ,如果存在則刪除,并返回該值,如果不存在則返回 null。
也就是 remove(Object o) 方法,刪除成功返回 true,刪除的元素不存在會返回 false。
5、查找元素
public boolean contains(Object o) {
return map.containsKey(o);
}
調(diào)用 HashMap 的 containsKey(Object o) 方法,找到了返回 true,找不到返回 false。
6、遍歷元素
LinkedHashSet< String > hashSet = new LinkedHashSet< >();
hashSet.add("A");
hashSet.add("B");
hashSet.add("C");
//1、增強(qiáng)for循環(huán)
for(String str : hashSet){
System.out.println(str);
}
//2、迭代器
Iterator< String > iterator = hashSet.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
7、小結(jié)
好了,這就是JDK中java.util.LinkedHashSet 類的介紹,記住有序且不能重復(fù)。
-
MAP
+關(guān)注
關(guān)注
0文章
49瀏覽量
15137 -
SET
+關(guān)注
關(guān)注
0文章
17瀏覽量
7949 -
key
+關(guān)注
關(guān)注
0文章
49瀏覽量
12826
發(fā)布評論請先 登錄
相關(guān)推薦
評論