![ef28843e5ca56eaaf0c09a07c1b6aea5.png](https://img-blog.csdnimg.cn/img_convert/ef28843e5ca56eaaf0c09a07c1b6aea5.png)
Set接口及常用的实现类
一、Set接口
- 类型参数:
E
- 此 set 所维护元素的类型 - 所有超级接口:
Collection<E>, Iterable<E> - 所有已知子接口:
NavigableSet<E>, SortedSet<E> - 所有已知实现类:
AbstractSet, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet
一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2)
的元素对 e1
和 e2
,并且最多包含一个 null 元素。
二、HashSet集合
- 此类实现
Set
接口,由哈希表(实际上是一个HashMap
实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null
元素。 - 特点:底层数据结构,哈希表;存储,取出数据快,线程不安全
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDome {
public static void main(String[] args) {
HashSet<String> hs=new HashSet<String>();
hs.add("张三");
hs.add("李四");
hs.add("八万");
System.out.println(hs); //结果:[李四, 张三, 八万]
Iterator<String> it=hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
/*
结果:
李四
张三
八万
*/
三、LinkedHashSet集合
- 具有可预知迭代顺序的
Set
接口的哈希表和链接列表实现。此实现与HashSet
的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。 - 特点:具有顺序性、线程不安全
import java.util.LinkedHashSet;
import java.util.Iterator;
public class LinkHashSetDome {
public static void main(String[] args) {
LinkedHashSet<String> Lhs=new LinkedHashSet<String>();
Lhs.add("张三");
Lhs.add("李四");
Lhs.add("八万");
System.out.println(Lhs); //结果:[张三, 李四, 八万]
Iterator<String> it=Lhs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
/*
* 结果:
* 张三
* 李四
* 八万
*/
}
}