色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java set和hashset

錢琪琛1年前8瀏覽0評論

Java中的集合類Set是一種無序,無重復元素的集合。Set接口是Collection接口的子接口,它實現了Collection接口中不允許重復元素的特性。Set的常用實現類有HashSet、TreeSet等,本文將著重介紹HashSet。

HashSetset = new HashSet<>(); //創建HashSet集合
set.add("Java");
set.add("is");
set.add("a");
set.add("programming");
set.add("language");
set.add("Java"); //添加"Java"元素,不生效
System.out.println(set); //輸出[Java, programming, language, a, is]

在上述代碼中,我們創建了一個HashSet集合,并調用add方法向集合中添加元素。由于HashSet是不允許重復元素的,因此添加第二個"Java"元素時未生效。最后我們輸出了整個集合,可以發現其無序、無重復、不允許空值等特點。

實際上,HashSet的存儲結構是基于HashMap實現的。HashSet是通過HashMap中的key,將元素值存儲在HashMap中的value中,因此HashSet的底層實現與HashMap類似。

public class HashSetextends AbstractSetimplements Set, Cloneable, Serializable {
private transient HashMapmap;
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
}

上述代碼顯示了HashSet的一部分實現。其構造函數中初始化了一個HashMap作為底層存儲結構,并在add方法中調用HashMap的put方法添加元素,而HashSet中的value不需要具體的值,只需要存在即可,因此我們將其定義為static final的PRESENT對象。

在使用HashSet時,還需要注意一些細節問題。例如,如果我們需要向一個空的HashSet中添加一個null值,那么HashSet會正常存儲并返回true,但如果再次向HashSet中添加null值,則返回false。

HashSetset = new HashSet<>(); //創建HashSet集合
set.add(null); //添加null值,返回true
set.add("Java");
set.add(null); //再次添加null值,返回false
System.out.println(set); //輸出[null, Java]

本文介紹了Java中的Set接口以及其實現類HashSet的使用,以及HashSet的底層存儲結構、元素不重復等特點。在使用HashSet時,我們需要注意它的細節問題,才能更加高效地應用它。