Set集合

一、Set子接口

  • 特点:无序、无下标、元素不可重复

  • 方法:全部继承自Collection中的方法

  • 注意:

    • add方法中有equals方法进行判断,如果添加的是重复元素,则不进行添加

    • 因为Set没有角标,所以不能使用fori进行遍历,遍历方式只有增强for和Iterator迭代器


二、Set实现类

  • HashSet【重点】:

    • 基于HashCode计算元素存放位置

    • 当存入元素的哈希码相同时,会调用equals进行确认,如果结果为true,则拒绝后者存入

    • 存储结构:哈希表(数组+链表+1.8之后的红黑树)

    • 存储过程:

      • 根据hashCode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步

      • 再执行equals方法,如果euqals方法为true,则认为是重复,否则形成链表

    • 补充:hashCode方法中prime固定默认为31的原因

      • 因为31是一个质数,可以减少散列冲突;

      • 使用31可以提高效率 31*i =(i<<5)-i

  • TreeSet:

    • 基于排序顺序实现元素不重复

    • 实现了SortedSet接口,对集合元素自动排序

    • 元素对象的类型必须实现Comparable接口,指定排序规则

    • 通过CompareTo方法确定是否为重复元素(在CompareTo方法定义比较规则)

    • 存储结构:红黑树

    • 要求:元素必须要实现Comparable接口,CompareTo方法返回值为0,则认为是重复元素

    • 二叉树左小右大。红黑树根节点必须是黑色,最后一个节点必须是黑色

    • 补充:如果不实现Comparalbe接口,可以在构造方法的选取上选取Comparator的实现类(用匿名内部类的方式)来定义,重写compare方法即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值