Set集合

开发工具与关键技术:Java、myEclipse
作者:吴晓佩
撰写时间:2019年07月03日

Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但set集合不能包含重复对象。Set集合由Set接口和Set接口的实现类组成。
Set接口继承了Collection接口,因此Set几口包含Collection接口的所有方法。
Set无序不可重复,当试图添加两个相同元素进Set集合,添加操作失败,add()方法返回false。
Set判断两个对象是否相等时不可以使用“==”,而应该使用“equals”。

Set的常用子类:
1、 TreeSet:有序存放,底层的数据结果结构是二叉树,对Set集合中的元素进行指定顺序的的排序,线程不同步。TreeSet是set的子类,还实现了java.util.SortedSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。

如下是TreeSet常用的方法示例与解析:
在这里插入图片描述
在这里插入图片描述
2、HashSet:散列存放,底层数据结构是哈希表,线程不同步的,如果多个线程同时访问一个 HashSet,假设有两个或者两个以上线程同时修改了 HashSet集合时,则必须通 过代码来保证其同步;不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变化,HashSet具有高效无序性。
HashSet集合保证元素唯一性:通过元素的hashCode方法和equals方法来完成。当元素的hashCode值相同时,才继续判断equals是否为true。如果为true,那么视为相同元素,不保存此元素,如果为false,就储存。如果hashCode值不相同,则无需判断equals,从而提高了对象比较的速度。
(1)LinkedHashSet:LinkedHashSet是HashSet的子类,ListedHashSet集合是根据元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序来保存的,性能略低于HashSet,但在迭代访问Set里的全部元素时性能好。
下面以我们常用的HashSet来举例,介绍set的常用方法,如下图:
在这里插入图片描述
注意:
1、Set的构造有一个约束条件,传入的Collection对象不能有重复值,必须小心操作可变对象,如果一个Set中的可变元素改变了自身状态导致Object.equals(Object )=true,则会出现一些问题。
2、HashSet集合里面存入数据,主要是先后调用了两个方法:hashCode方法和equals方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值