java集合【Set】学习

参考链接:https://blog.csdn.net/qq_33642117/article/details/52040345

Set:集合,引自数学集合特性【唯一性,无序性】,不会存储重复元素,用于存储无序(存入和取出的顺序不一定相同)元素。

存储对象具有相等性

   引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号(java是依据对象的内存地址计算出的此序号),所以两个不同的对象的hashCode值是不可能相等的。Object  hashCode方法返回的是该对象的内存地址。

Set实现类:

  • HashSet 线程不安全,存取速度快。底层是以哈希表实现的。
  • HashSet存储元素的顺序并不是按照存入时的顺序(和List显然不同) 是按照哈希值来存的所以取数据也是按照哈希值取得。HashSet主要通过对象的hashCode及equals判断元素相等,若hashCode补相等,则hashSet认为两个对象是不会重复的【满足set没有重复元素的特性】,对于hashCode相同但equals返回false的元素,hashSet将相同hashCode的元素存储在一个hashCode下方【一列存储,一个hashCode位置上可以存储多个元素】,
  • 调用原理:先判断hashcode 方法的值,如果相同才会去判断equals 如果不相同,是不会调用equals方法的。
  • TreeSet 红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。
  • 红黑树算法规则:左小右大
  • TreeSet集合排序的两种方式:
  • 1.让元素自身具备比较性。也就是元素需要实现Comparable接口,覆盖compareTo 方法。
  • 2.让容器自身具备比较性,自定义比较器。当元素自身不具备比较性,或者元素自身具备的比较性不是所需的。

    那么这时只能让容器自身具备。定义一个类实现Comparator 接口,覆盖compare方法。并将该接口的子类对象作为参数传递给TreeSet集合的构造函数。当Comparable比较方式,及Comparator比较方式同时存在,以Comparator比较方式为主。

  • LinkedHashSet 会保存插入的顺序。

  • 总结:

  • array——角标。

  • link——first,last。

  • hash——hashCode,equals.

  • tree——两个接口,Comparable,Comparator。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值