【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)方法
  • 方法
  •    重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。
目录
相关文章
|
2月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
112 7
|
3月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
278 100
|
3月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
308 101
|
3月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
3月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
4月前
|
存储 NoSQL Java
Java Stream API:集合操作与并行处理
Stream API 是 Java 8 提供的集合处理工具,通过声明式编程简化数据操作。它支持链式调用、延迟执行和并行处理,能够高效实现过滤、转换、聚合等操作,提升代码可读性和性能。
|
4月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
Java
java中Set,Map,Stack一些简单用法
1 import java.util.Iterator; 2 import java.util.Stack; 3 import java.io.*; 4 import java.util.
721 0
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
201 1