Set集合

Set集合

  • 特点:无序、无下标、元素不可重复
  • 方法:全部继承Collection中的方法

实现类:

HashSet

  • 基于HashCode实现元素不重复

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

  • 基本方法:

    • add
    • remove
    • contains
    • size

重写hashCosd和equals方法可以让new出来的相同对象也无法加如集合中,真正的不可重复性

public static int hashCode(Object a[]) {
    if (a == null)
        return 0;

    int result = 1;

    for (Object element : a)
        //31是一个质数,减少散列冲突,让尽可能多的元素放在不同的位置
        //31提高执行效率	31*i=(i<<5)-i
        result = 31 * result + (element == null ? 0 : element.hashCode());

    return result;
}

TreeSet

  • 基于排列顺序实现元素不重复
  • 存储结构:红黑树,基于二叉查找树(一个结点最多有两个孩子,左孩子比父亲小,右孩子比父亲大)
  • 实现了SortedSet接口,对集合元素自动排序
  • 元素对象的类型必须实现Comparable接口,指定排序规则
  • 通过CompareTo方法确定是否为重复元素
  • 基本方法一样

添加多个数据时,由于TreeSet用的是红黑树结构,需要写一个比较规则

  • 方法一:实现Comparable,实现CompareTo方法
  • 方法二:常见集合时指定比较规则,用Comparator匿名内部类实现接口
//实现接口方法
    @Override
    public int compareTo(Person o) {
        int n1 = this.getName().compareTo(o.getName());//名字相同返回0
        int n2 = this.getAge()- o.getAge();//年龄相同返回0

        return n1==0?n2:n1;//名字相同比年龄
    }
}
================================================
//匿名内部类实现接口方法
TreeSet<Person> persons = new TreeSet<>(new Comparator<Person>() {
    @Override
    public int compare(Person o1, Person o2) {
        int n1 = o1.getName().compareTo(o2.getName());
        int n2 = o1.getAge()- o2.getAge();         

        return n1==0?n2:n1;
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值