集合类-Set

Set中每个元素都是唯一的,并且不保证插入元素的顺序。

1. 父接口
Set继承了Collection接口,并且具有父接口的所有方法。

2. 实现类
Set下有TreeSet、HashSet实现类,HashSet下有LinkedHashSet子类。
TreeSet
保持次序的Set,底层实现为树结构。可以提取出有序的序列。存放的元素必须实现Comparator接口。
TreeSet实现了SortedSet接口,该接口继承自Set接口。

 public interface SortedSet<E> extends Set<E>
 public class TreeSet<E> extends AbstractSet<E>  implements NavigableSet<E>,Cloneable,java.io.Serializable

新增了comparator(排序方式)、subSet(生成Set子集)、headSet(生成Set子集)、tailSet(生成Set子集)、first(返回第一个元素)、last(返回最后一个元素)方法。


HashSet
为快速查找而设计的Set,元素必须实现hashCode()。
HashSet继承自AbstractSet,实现了Set, Cloneable, java.io.Serializable接口。

public class HashSet<E> extends AbstractSet<E>  implements Set<E>, Cloneable, java.io.Serializable

LinkedHashSet
具有HashSet的查询速度,且内部使用链表维护元素的顺序。必须实现hashCode()。
LinkedHashSet继承了HashSet,并实现Set, Cloneable, java.io.Serializable接口。

public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable

3. 性能比较
添加元素

大小TreeSetHashSetLinkedHashSet
10746308350
100501178270
1000714216303
1000019757111615

查找元素

大小TreeSetHashSetLinkedHashSet
101739165
1002647574
1000410110111
10000552215256

迭代元素

大小TreeSetHashSetLinkedHashSet
10899493
100687355
1000697254
100006910058

可以看出HashSet性能总比TreeSet好,特别是在添加和查询元素时,所有一般使用HashSet。除非需要一个排好序的Set时,可以使用TreeSet。

4. 与其他集合类区别
Set和List区别
集合类-List

Set和Map区别
相同点:都继承自Collection接口。Set元素和Map键值都不能重复。
不同点:Set保存单元素,Map保存键值对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值