HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 底层声明了一个 HashMap,HashSet 做了一层包装,操作 HashSet 里的元素时其实是在操作 HashMap 里的元素。TreeSet底层也是声明了一个 TreeMap,操作 TreeSet 里的元素其实是操作 TreeMap 里的元素。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
//E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
Set<E> sites = new HashSet<E>();
Serializable接口:
ArrayList实现了java.io.Serializable接口,该接口主要是在序列化的时候起作用。
Cloneable接口:
它允许在堆中克隆出一块和原对象一样的对象,并将这个对象的地址赋予新的引用,这样显然我对新引用的操作,不会影响到原对象。
此类实现了Cloneable接口,以指示Object的clone()方法可以合法地对该类实例进行按字段复制。Object的clone()方法,提供的是一种浅克隆的机制,如果想要实现对对象的深克隆,可以引入第三方jar包等方式。
优势:
假如我们现在想要在一大堆数据中查找X数据。LinkedList的数据结构就不说了,查找效率低的可怕。ArrayList哪,如果我们不知道X的位置序号,还是一样要全部遍历一次直到查到结果,效率一样可怕。HashSet天生就是为了提高查找效率的。
散列码是由对象导出的一个整数值。在Object中有一个hashCode方法来得到散列码。基本上,每一个对象都有一个默认的散列码,其值就是对象的内存地址。但也有一些对象的散列码不同,比如String对象,它的散列码是对内容的计算结果。
Modifier and Type | Method and Description |
---|---|
boolean | add(E e) 将指定的元素添加到此集合(如果尚未存在)。 |
void | clear() 从此集合中删除所有元素。 |
Object | clone() 返回此 HashSet实例的浅层副本:元素本身不被克隆。 |
boolean | contains(Object o) 如果此集合包含指定的元素,则返回 true 。 |
boolean | isEmpty() 如果此集合不包含元素,则返回 true 。 |
Iterator<E> | iterator() 返回此集合中元素的迭代器。 |
boolean | remove(Object o) 如果存在,则从该集合中删除指定的元素。 |
int | size() 返回此集合中的元素数(其基数)。 |
Spliterator<E> | spliterator() 在此集合中的元素上创建late-binding和故障快速 |