Chp13-Set集合

Collection

  • 是List和Set的父接口
  • 所有集合都是由Collection或者Map派生

特点

  1. 内部存放List和Set的共性方法
  2. 没有直接实现类

Set的常用实现类

  1. HashSet
  • JDK1.2 低层哈希表(数组+链表)实现,线程不安全,效率高
  1. LinkedHashSet
  • JDK1.2 是HashSet的子类,底层哈希表实现,线程不安全,效率高
  1. TreeSet
  • JDK1.2 底层红黑树实现,是SortedSet的实现类,线程不安全,效率高

红黑树:树状结构存放数据,使用的是二分查找法,特点为查询效率快

创建

  • 建议使用多态
Set<泛型> 集合名=new 实现类名<>();

常用方法

  • 所有方法都继承自Collection,无独有方法

遍历

  1. 迭代器遍历
  2. 外遍历forEach
  3. 自遍历forEach

哈希表的去重原理

  1. 先调用元素的hashCode方法获取哈希码值
  2. 通过哈希码值%数组长度(16)得到存放下标
  3. 如果下标位置未存有元素,则直接存放
  4. 如果下标位置存有元素,这调用当前元素的equals方法与下标位置元素进行值的比较
  5. 都不相同,在下标位置上继续脸链表存放
  6. 有相同,则舍弃添加当前元素

使用

  1. HashSer和LinkedHashSet如果存放的时自定义类型,则必须重写hashCode和equals方法才能实现去重
  2. LinkedHashSet可以保证 元素存如与取出的顺序一致
  3. TreeSet可以实现对元素进行默认的升序排序
  • 如果TreeSet中存放的时自定义类型,则必须自定义排序规则
  • 排序方式:
    实现Comparable接口,重写compareTo方法
  • 思路:让当前对象this和参数对象o进行比较
  • 实现:对谁排序,就让谁实现
  • 规则:
    从小到大:
    this的值>o的值,返回正数
    this的值<o的值,返回负数
    从大到小:
    this的值>o的值,返回负数
    this的值<o的值,返回正数
    相等返回0
 package com.by.entity;
        
        public class Student implements Comparable<Student>{
            private String name;
            private int age;
            private double score;
        
            //省略getter、setter、构造
        
            @Override
            public int compareTo(Student o) {
                //根据学生成绩从高到底排序
                if (this.score > o.score) {
                    return -1;
                } else if (this.score < o.score) {
                    return 1;
                }
                return 0;
            }
        }
  1. 实现Comparator接口,重写Compare方法
    思路:让参数o1和o2进行比较
    实现:在集合创建处的小括号内传入实现类对象
   Set<Student> set = new TreeSet<>((o1,o2)->{
                    //根据学生成绩从低到高
                    if (o1.getScore() > o2.getScore()) {
                        return 1;
                    } else if (o1.getScore() < o2.getScore()) {
                        return -1;
                    }
                    return 0;
                });
  1. 默认识别Comparable,但是Comparator优先级更高
  2. Comparator更能保护类的单一职责,有利于后期代码的维护,集合排序扩展性更高,更推荐该方式
  1. TreeSet去重规则:当compareTo或compare方法返回值为0时去重

今日掌握

  1. collection 的特点
  2. set的存储特点
  3. set的常用实现类和特点
  4. set的遍历方式
  5. 哈希表的去重原理
  6. TreeSet自定义排序规则的方式
  7. TreeSet的去重规则
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值