Set集合

**Set集合存储的元素是无序的,而且不能存储重复的元素,**每当有新的元素存入的时候,Set集合会先去过滤,如果发现和集合中的元素出现重复,就不允许添加。

应用场景
当我们不想让集合中出现重复的元素的时候,使用Set集合
当我们需要排除重复数据时,使用Set集合

HashSet

  1. 定义

    • HashSet集合中的元素是通过hash值来比较是否相同
    • 集合通过元素的hashCode和equals方法来比较两个元素是否相同, 不同就存入, 相同不存入
    • 元素存入的位置未知,和存入的顺序无关
  2. 存储原理

    • HashSet最后还是存入数组中, 只是根据元素的Hash值来确定存入的角标位置
      • 元素的hash值 ^ (元素的hash值 >>> 16) & (数组的长度-1)
    • HashSet中不是直接存入我们给定的元素, 而是用集合中的一个内部类封装我们存入的元素,所以当我们存入null的时候,不会因为和数组中角标位上默认值null起冲突
    • 如果两个不同的元素根据不同的Hash值计算出了同一个角标值,那么都能存进去
  3. 构造方法

    • HashSet() 构造出一个新的集合, 底层数组默认的初始容量是16(扩容一倍),加载因子是0.75
      • 加载因子: 集合中的数组可用的
      • 角标值得可选范围越小,计算出重复角标值得概率就越高
    • HashSet(Collection<? extends E> c) 构造一个包含指定collection中元素的新set
  4. 常用方法

    • boolean add( E e) 如果此set集合中尚未包含指定元素,则添加指定元素
    • boolean remove(Object o) 移除某个元素 []
    • int size() 获取集合的长度

原理解析

  • HashSet是通过调用元素的hashCode和equals方法来比较两个元素是否形同的,所以如果要保证引用数据类型逻辑上的唯一性,就必须重写hashCode方法和equals方法

LinkedHashSet:兼顾了linked的有序性和HashSet的元素唯一性

TreeSet集合

  1. 定义

    • TreeSet是一种顺序的集合, 记住, 这里的顺序是指集合中的元素有顺序, 她是通过比较元素的大小来存放的, 大的存右边,小的存左边
    • 存入的元素必须实现Comparable接口,并且重写comparTo方法
    • 最后存入的元素会形成一个树状结构
  2. 构造方法

    • TreeSet() 构造一个新的空set, 该set根据其元素的自然顺序进行排序
    • TreeSet(Comparator <? super E> comparator) 构建一个空的TreeSet, 他根据指定比较器进行排序
  3. 常用方法

    • add(E e) 将指定元素添加到此set
    • first() 返回此set中当前第一元素
    • last() 返回此set中当前最后一个元素
    • floor() 返回此set中小于等于给定元素的最大元素,不存在则返回null
    • higher() 返回此set中严格大于给定元素的最小元素,不存在则返回null
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值