HashSet其实就是HashMap套上了Set的马甲
HashSet内部维护了一个HashMap;
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
//略....
}
总结:HashMap的key是不能重复的,而HashSet的元素又是作为map的key,所以HashSet的元素也不会重复了。
例子:
public static void main(String[] args) {
HashSet<String> hs = new HashSet<String>();
hs.add("测");
hs.add("试");
hs.add("去");
hs.add("重");
hs.add("!");
hs.add("!");
hs.add("!");
Iterator<String> it = hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
打印:

另:HashMap则是依赖HashCode保证key不重复的
本文深入探讨了HashSet与HashMap之间的内在联系,揭示了HashSet如何利用HashMap实现元素的唯一性,以及通过示例代码展示了HashSet元素去重的过程。
2253

被折叠的 条评论
为什么被折叠?



