Java常见面试题:Set集合

简介: 对于Set集合应该有一个基础的认识:Set集合本身只定义有不允许重复的存储。Set接口完整的继承了Collection接口,也就是说Set集合几乎与Collection的操作是对等的。大部分情况下Set不是首选,List是首选,以下是Set集合的基本流程。

Set集合

对于Set集合应该有一个基础的认识:Set集合本身只定义有不允许重复的存储。Set接口完整的继承了Collection接口,也就是说Set集合几乎与Collection的操作是对等的。

从实际的开发来看,大量使用到Set集合的框架只有Hibernate;还有一些批量删除的功能也是通过Set集合实现的,因为大部分情况下优先考虑的还是List接口。

对于Set接口最麻烦的问题不在于它的接口特点而在于子类特点,如果从开发者的角度来看,整个Set接口中有以下三个可能见到的子类:

1. HashSet:无序存放
(1)打开源代码之后发现整个HashSet类里面存在有一个HashMap,但是很明显,没使用这个Map的Value,只使用了Key(HashMap的主要特点是key不能重复);
(2)在HashSet类执行add()方法的时候发现是利用了Map接口中的put()实现的;
(3)在整个存储过程之中存在有一个hashCode()的使用;
(4)在内部的Node类处理时依然使用了equals()判断key与value内容。

2.TreeSet:发现使用的是Map集合(SortedMap接口子类)
(1) 里面存放的是TreeMap,TreeMap的特点在于所有的key都是可以排序的,排序的依据是Comparable(往往会忽略掉Comparator);
(2) 在TreeMap之中对于大小的关系判断强制使用了Comparable接口中的compareTo()完成。

3.LinkedHashSet:如果这个时候需要进行连续的保存(FIFO),就可以使用另外一个子类。它之所以可以进行顺序保存,是因为在进行存储的时候采用的是链表形式完成的。

范例:HashSet子类

image.png
image.png
image.png
image.png
image.png

这个时候之所以没有区分重复元素,是因为这个子类里面并没有提供一个与之相符合的hashCode()和equals()方法。

范例:HashSet实现重复元素的不保存

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

如果希望保存的为增加顺序,那么可以更换子类。

image.png

TreeSet中保存的数据都必须是Comparable接口的子类。

范例:使用TreeSet

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
TreeSet的使用必须依靠Comparable,在实际开发之中即便使用了集合保存所有的查询结果,也很少出现重复的判断,因为数据表的主键不会重复。也就证明这个时候是否进行重复元素的判断是没有任何意义的。所以在开发里面最常用的一个子类是HashSet,只需要判断重复,而且大部分使用的情况是里面保存的只是String、Integer类,很少会去保存一个对象。

更多专业知识,面试技巧就在阿里云开发者社区,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

相关文章
|
21天前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
38 1
|
23天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
2天前
|
程序员 索引 Python
06-python数据容器-set(集合)入门基础操作
06-python数据容器-set(集合)入门基础操作
|
6天前
|
存储 Java 编译器
Java集合丛林:深入了解集合框架的秘密
Java集合丛林:深入了解集合框架的秘密
11 0
Java集合丛林:深入了解集合框架的秘密
|
10天前
|
Java BI
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
|
10天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
33 0
|
19天前
|
存储 缓存 算法
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
46 0
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
|
20天前
|
存储 安全 Java
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(不可变集合篇)
30 1
|
24天前
|
Java 程序员 API
java1.8常考面试题
在Java 1.8版本中,引入了很多重要的新特性,这些特性常常成为面试的焦点
42 8
|
27天前
|
存储 Shell Linux
【Shell 命令集合 系统设置 内置命令】⭐⭐⭐Linux 设置或修改shell环境变量set命令 使用指南
【Shell 命令集合 系统设置 内置命令】⭐⭐⭐Linux 设置或修改shell环境变量set命令 使用指南
29 0