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面试技巧

相关文章
|
2月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
234 100
|
2月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
266 101
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
1月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
71 7
|
2月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
3月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
2月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
3月前
|
存储 NoSQL Java
Java Stream API:集合操作与并行处理
Stream API 是 Java 8 提供的集合处理工具,通过声明式编程简化数据操作。它支持链式调用、延迟执行和并行处理,能够高效实现过滤、转换、聚合等操作,提升代码可读性和性能。
|
消息中间件 缓存 Java
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?
Java 最常见的面试题:怎么保证缓存和数据库数据的一致性?