【Java】集合进阶——Set集合

简介: 【Java】集合进阶——Set集合

3.Set集合

   3.1Set集合概述和特点

  •    不包含重复元素的集合
  •    没有带索引的方法,所以不能使用普通for循环遍历

   3.2哈希值

  哈希值:是JDK根据对象的地址或字符串或者数字算出来的int类型的数值

 

   Object类中有一个方法可以获取对象的哈希值

  •    public int hashCode():返回对象的哈希码值

   对象哈希值的特点

  •    同一个对象多次调用hashCode()方法返回的哈希值是相同的
  •    默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同。

 3.3HashSet集合概述和特点

   HashSet集合的特点

  •    底层数据结构是哈希表
  •    对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致。
  •   没有带索引的方法,所以不能使用普通for循环遍历。
  •    由于是Set集合,所以是不包含重复元素的集合

 

   3.4HashSet集合保证元素唯一性源码分析

 HashSet集合添加一个元素的过程:

HashSet集合存储元素:

要保证元素唯一性,需要重写 hashCode()equals()

3.5常见数据结构之哈希表

   

哈希表在存储数据的时候,首先让哈希值对16取余,余数相同比较哈希值,不同就存入相应位置,相同则继续比较数据内容,不同就存入相应位置,相同则不进行存储。

3.6LinkedHashSet集合概述和特点

   LinkedHashSet集合的特点

  •    哈希表和链表实现的Set接口,具有可预测的迭代次序。
  • 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的。
  •    由哈希表保证元素唯一,也就是说没有重复的元素。

   

   3.7TreeSet集合概述和特点

 TreeSet集合特点:

  •    元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法

TreeSet():根据其元素的自然排序进行排序

       TreeSet(Comparator comparator):根据指定的比较器进行排序

  •    没有带索引的方法,所以不能使用普通for循环遍历
  •  由于是Set集合,所以不包含重复元素的集合

 

   3.8自然排序Comparaable的使用

  •    存储学生对象并遍历,创建TreeSet集合使用 无参构造方法
  •  要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序

   

   结论:

  •    用TreeSet集合存储自定义对象时,无参构造方法使用的是 自然排序对元素进行排序的。


  • 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(To)方法
  •    重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。

 

   3.9比较器排序Comparator的使用

  •  存储学生对像并遍历,创建TreeSet集合使用 带参构造方法
  •    要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序。

 

   结论:

  •  用TreeSet集合存储自定义对象,带参构造方法使用的是 比较器排序对元素进行排序的。
  •    比较器排序,就是 让集合构造方法接收Comparator的实现类对象,重写comparae(To 1,To 2)方法
  • 方法
  •    重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。
目录
相关文章
|
7天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
29 5
|
27天前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
41 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
20天前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
31 4
|
1月前
set集合
HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。 LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。 TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。
|
1月前
|
存储 算法 Java
Java Set深度解析:为何它能成为“无重复”的代名词?
Java的集合框架中,Set接口以其“无重复”特性著称。本文解析了Set的实现原理,包括HashSet和TreeSet的不同数据结构和算法,以及如何通过示例代码实现最佳实践。选择合适的Set实现类和正确实现自定义对象的hashCode()和equals()方法是关键。
30 4
|
1月前
|
Java
那些与Java Set擦肩而过的重复元素,都经历了什么?
在Java的世界里,Set如同一位浪漫而坚定的恋人,只对独一无二的元素情有独钟。重复元素虽屡遭拒绝,但通过反思和成长,最终变得独特,赢得了Set的认可。示例代码展示了这一过程,揭示了成长与独特性的浪漫故事。
20 4
|
1月前
|
Java 开发者
Java Set:当“重复”遇见它,秒变“独宠”!
在Java编程中,Set接口确保集合中的元素不重复,每个元素都是独一无二的“独宠”。本文介绍了Set的两种常见实现:HashSet和TreeSet。HashSet基于哈希表实现,提供高效的添加、删除和查找操作;TreeSet基于红黑树实现,不仅去重还能对元素进行排序。通过示例代码,展示了这两种集合的具体应用,帮助开发者更好地理解和使用Set。
25 4
|
1月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
30 2
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 开发者
Java Set:无序之美,不重复之魅!
在Java的集合框架中,Set接口以其“无序之美”和“不重复之魅”受到开发者青睐。Set不包含重复元素,不保证元素顺序,通过元素的hashCode()和equals()方法实现唯一性。示例代码展示了如何使用HashSet添加和遍历元素,体现了Set的高效性和简洁性。
40 4
下一篇
DataWorks