set接口和实现类

简介: set

Set 特性: 相对于 List

1.    无序的;
2.    唯一的;
3.    无索引的;      没有 get方法

无序的,唯一的,都有特殊解释;
无序:    有的实现类无序,有的实现类有序,有的是实现按照自然顺序;
唯一:    有具体的协定,满足了协定要求才是真的唯一;
协定要求的内容: 有些set 不遵守这个 协定 有自己的协定;
如果有重复的元素,那么就拒绝添加;
经过测试,和 == 没有关系;
hashcode  和  equals 相互作用;

先 hash后equals原因 hash是基本数据,判断 == 效率比 hash 好很多!

重复的元素:
        hashcode
        equals    
        在每次添加元素的时候,都会先计算要添加的元素的hashcode值;
        如果有相等 hashcode 值,代表元素有可能相等,然后再去 equals 得到最终的结束(添加 或者 拒绝);
        如果没有像等的 hashcode 值,那么直接添加;

结论: 自定义的数据类型,必须重写 hashcode  和 equals 方法;
        hashcode重写:
                对象 equals 那么 hashcode 必须相等;
                对象不equals 那么 hashcode尽量不要想等;

Set 注意:

    每一个 Set 实例,底层都包含了一个 Map 实例;
    Set 实例的元素,实际上 就是 Map实例的 Key;


ashSet 实现类
HashSet 实现类 如果是 Integer类型 则自带排序,其他的 无序

特性:
    1.    底层是 HashMap  哈希表
    2.    完全的无序 ( 插入时顺序没有保证,    比较顺序也没有保证 )
    3.    可以为 null;
    4.    整体效率快;

HashSet 有一个比较重要的子类:    LinkedHashSet
HashSet    是不同步的, 线程不安全的;
Hashtable 是类似于 HashSet的实现;
        Hashtable 线程是安全的, 加锁;
                 效率是低于 HashSet 的;
                 底层 也是 哈希表;

hash相关:
hash 哈希的 特性 就是 速度快!

哈希快的原因是: 底层是 哈希表;

哈希表是根据元素的 hash 值 和 规定的哈希算法, 把数据构成了一个表,这个表称为 哈希表; 哈希表是一种 数据结构;

TreeSet 实现类
TreeSet

    其 实例, 有 TreeMap 支持;
    底层:    红黑二叉树;

特性:

1.    元素不能为 null, 不然会报空指针异常;
2.    元素被插入时, 保证了自然顺序;
3.    元素插入 避免重复, 没有遵循 hashcode equals 协定;

重点:

避免重复,没有遵循 hashcode equals 协定;
(1)自定义的数据类型:
        判断是否重复的协定,重写 CompareTo 方法;
(2)如果是 java 自定义的数据类型,没有实现内部比较器,应该继承 约定的 Comparator 外部比较器来进行比较;

TreeSet 比较的协定:
1.    比较功能 ( 内部比较器 Comparable      外部比较器 Comparator)
2.    比较功能返回的是 int 值;
    0 代表相等, 拒绝添加;
    + 代表大于    右边,
    -  代表小于, 左边;

重写 comparaTo ()
括号里的是节点,return this --- 括号!!!!! 有讲究的 不是 随便的

LinkedHashSet 实现类
LinkedHashSet 学习

继承与 HashSet

底层是 链表 + 哈希表 ( 数组 + 链表 );

特性:

1.    保证了元素插入时的顺序;
2.    可以为null;

相对于 父类 HashSet而言,底层过于复杂,效率低于父类; 但比 ArrayList 快;

相关文章
|
8天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
22天前
|
Python
python 格式化、set类型和class类基础知识练习(下)
python 格式化、set类型和class类基础知识练习(下)
24 0
|
22天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
57 0
|
2月前
|
安全 Java API
Java并发 - J.U.C并发容器类 list、set、queue
Queue API 阻塞是通过 condition 来实现的,可参考 Java 并发 - Lock 接口 ArrayBlockingQueue 阻塞 LinkedBlockingQueue 阻塞 ArrayQueue 非阻塞 LinkedQueue 非阻塞
|
7月前
|
存储 安全 Java
每日一道面试题之set有哪些实现类?
每日一道面试题之set有哪些实现类?
|
3月前
|
存储 Java 索引
Java Set接口及其常用实现类详解
Java Set接口及其常用实现类详解
|
7月前
|
存储 算法 Java
java集合框架------Collection接口,List接口与实现类,Set接口与实现类
java集合框架------Collection接口,List接口与实现类,Set接口与实现类
|
4月前
|
存储 安全 索引
容器【容器介绍、Set接口介绍、 HashSet容器的使用、TreeSet容器的使用】(三)-全面详解(学习总结---从入门到深化)
容器【容器介绍、Set接口介绍、 HashSet容器的使用、TreeSet容器的使用】(三)-全面详解(学习总结---从入门到深化)
14 0
|
9月前
|
存储 算法 Java
Java Collection接口的子接口之Set接口及其Set接口的主要实现类HashSet,LinkedHashSet,TreeSet详解(一)
Java Collection接口的子接口之Set接口及其Set接口的主要实现类HashSet,LinkedHashSet,TreeSet详解
46 0
|
5月前
|
分布式计算 Hadoop 大数据