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 快;

相关文章
|
27天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
37 6
|
27天前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
32 2
|
27天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
【10月更文挑战第16天】Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。通过 hashCode() 和 equals() 方法实现唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 添加和遍历元素,体现了 Set 的高效性和简洁性。
27 4
|
27天前
|
存储 算法 Java
作为Collection接口的子接口,Set不支持重复元素,也不保证元素顺序,适用于需要唯一性约束的场景。
【10月更文挑战第16天】Java的Set接口因其独特的“不重复性”而备受关注。作为Collection接口的子接口,Set不支持重复元素,也不保证元素顺序,适用于需要唯一性约束的场景。其背后的实现机制依赖于哈希表或红黑树等数据结构,通过哈希算法和equals()方法确保元素的唯一性。例如,使用HashSet可以轻松过滤重复的字符串。这种设计使Set在处理唯一数据时高效便捷。
25 3
|
29天前
|
存储 Java 数据处理
Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。
Java Set:无序之美,不重复之魅!Set 是 Java 集合框架中的一个接口,不包含重复元素且不保证元素顺序。它通过 hashCode() 和 equals() 方法确保元素唯一性,适用于需要唯一性约束的数据处理。示例代码展示了如何使用 HashSet 实现这一特性。
25 5
|
29天前
|
存储 Java 数据处理
在Java集合框架中,Set接口以其独特的“不重复”特性脱颖而出
【10月更文挑战第14天】在Java集合框架中,Set接口以其独特的“不重复”特性脱颖而出。本文通过两个案例展示了Set的实用性和高效性:快速去重和高效查找。通过将列表转换为HashSet,可以轻松实现去重;而Set的contains方法则提供了快速的元素查找功能。这些特性使Set成为处理大量数据时的利器。
16 4
|
29天前
|
Java
Java Set 是一个不包含重复元素的集合接口,确保每个元素在集合中都是唯一的
【10月更文挑战第14天】Java Set 是一个不包含重复元素的集合接口,确保每个元素在集合中都是唯一的。本文介绍了 Set 的独特特性和两个常用实现类:基于哈希表的 HashSet 和基于红黑树的 TreeSet。通过示例代码展示了它们如何高效地处理唯一性约束的数据。
44 3
|
30天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
|
29天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。
【10月更文挑战第14天】从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其独特的“不重复性”要求,彻底改变了处理唯一性约束数据的方式。本文深入探讨Set的核心理念,并通过示例代码展示了HashSet和TreeSet的特点和应用场景。
19 2
|
1月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。