Java_Set

Set:散列集

Set接口描述一个集合,集合SetCollection的子接口,Set不允许其数据元素重复出现,也就是说在Set中每一个数据元素都是唯一的。

HashSet:哈希散列集

Set的实现类。HashSet通过Hash算法排布集合内的元素,与输入元素的顺序不同

Hash算法:将任意长度的输入(又叫做预映射),通过散列算法,变换成固定长度的输出,输出就是散列值。这种转换是一种压缩映射。对于不同类型的信息,其散列值公式不完全相同

HashSet存储原理:其底层为一个数组。

HashSet能将存储的数据进行去重处理,保留的元素为最后添加的元素,

当我们使用HashSet存储自定义类时,需要在自定义类中重写equals和hashCode方法,主要原因是集合内不允许有重复的数据元素,在集合校验元素的有效性时(数据元素不可重复),需要调用equals和hashCode验证。

HashSet在判断数据元素是否重复时:

1. 检查hashCode值是否与集合中已有相同。2. 如果hashCode相同再调用equals方法进一步检查。(equals返回真表示重复)

 

TreeSet:树集

底层为一个红黑树。插入时大数在右,小数在左。

TreeSet是一个有序集合,其元素按照升序排列,默认是按照自然顺序排列。

TreeSet虽然是有序的,但是并没有具体的索引,当插入一个新的数据元素的时候,TreeSet中原有的数据元素可能需要重新排序,所以TreeSet插入和删除数据元素的效率较低

TreeSet中的对象元素需要实现Comparable接口。TreeSet类中跟HashSet类一样也没有get()方法来获取指定位置的元素,所以也只能通过迭代器方法来获取。

当我们使用TreeSet存储自定义类时,需要在自定义类中重写compareTo方法,以提供比对形式,否在TreeSet不能对用户自定义的类型进行正确的树状排序。将会抛出java.lang.ClassCastException异常

 

所有实现Comparable接口的类的实例对象都有比较功能(public int compareTo( …))

返回值为 int 类型。大于零 当前数大于参数。小于0 小于参数。等于零,两数值相同

 

Set定义的一些方法

.size() 返回元素总数

add(Object o) 添加元素

remove(Object o) 移除元素

contains(Object o) 检查是否包含o,返回布尔值

addAll(Collection c) 向Set中添加c包含的全部数据元素(并集)

removeAll(Collection c) 从Set中移除c包含的全部数据元素(差集)

retainAll(Collection c) 求Setc的交集

containsAll(Collection c) 判断Set是否包含c中的全部数据元素,如果全部包含返回true,否则返回false

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值