news 2026/6/15 14:07:15

吃透Set集合,这篇练习帖就够了!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
吃透Set集合,这篇练习帖就够了!

在Java编程中,Set集合是处理无序、不可重复元素的重要工具,也是面试和开发中的高频考点。今天整理了Set集合的核心练习和知识点,帮大家彻底搞懂它的用法和特性!

一、核心考点回顾

1. Set的特性:元素无序且唯一,底层依赖 equals() 和 hashCode() 方法保证唯一性。

2. 常用实现类:

- HashSet :基于哈希表,查询效率高,无序。

- LinkedHashSet :继承HashSet,维护插入顺序。

- TreeSet :基于红黑树,可对元素排序,需实现Comparable或自定义Comparator。

二、经典练习题

练习1:HashSet基本操作

需求:向HashSet中添加字符串元素,包含重复值,观察结果并遍历输出。

java

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

public class HashSetTest {

public static void main(String[] args) {

Set<String> set = new HashSet<>();

// 添加元素

set.add("Java");

set.add("Python");

set.add("Java"); // 重复元素

set.add("C++");

// 遍历方式1:增强for

System.out.println("增强for遍历:");

for (String s : set) {

System.out.println(s);

}

// 遍历方式2:迭代器

System.out.println("迭代器遍历:");

Iterator<String> it = set.iterator();

while (it.hasNext()) {

System.out.println(it.next());

}

}

}

思考:重复的"Java"是否会被添加?输出顺序和插入顺序一致吗?

练习2:TreeSet排序

需求:向TreeSet中添加整数,实现自然排序和自定义降序排序。

java

import java.util.Comparator;

import java.util.Set;

import java.util.TreeSet;

public class TreeSetTest {

public static void main(String[] args) {

// 自然排序

Set<Integer> numSet1 = new TreeSet<>();

numSet1.add(3);

numSet1.add(1);

numSet1.add(2);

System.out.println("自然排序:" + numSet1);

// 自定义降序排序

Set<Integer> numSet2 = new TreeSet<>(new Comparator<Integer>() {

@Override

public int compare(Integer o1, Integer o2) {

return o2 - o1;

}

});

numSet2.add(3);

numSet2.add(1);

numSet2.add(2);

System.out.println("降序排序:" + numSet2);

}

}

思考:TreeSet的排序依据是什么?自定义排序需要注意什么?

练习3:Set去重实战

需求:将包含重复元素的List转换为Set去重,再转回List。

java

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class SetDeduplication {

public static void main(String[] args) {

List<String> list = new ArrayList<>();

list.add("苹果");

list.add("香蕉");

list.add("苹果");

list.add("橙子");

// 去重

Set<String> set = new HashSet<>(list);

List<String> newList = new ArrayList<>(set);

System.out.println("去重后的列表:" + newList);

}

}

扩展:如果需要保留原列表的插入顺序,该用哪个Set实现类?

三、常见面试题

1. HashSet和HashMap的关系?(HashSet底层依赖HashMap实现,元素存在key位置,value为固定对象)

2. 为什么Set能保证元素唯一?(添加元素时会先通过hashCode()计算哈希值,再用equals()比较,两者都相同则视为重复)

3. TreeSet能否存储自定义对象?(可以,需让自定义类实现Comparable接口或在创建TreeSet时传入Comparator)

如果大家有更多Set集合的经典练习题或疑问,欢迎在评论区交流~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:19:28

异常练习:在试错中吃透Java异常处理的底层逻辑

最近扎进了异常处理专项练习里&#xff0c;才发现以前对try-catch-finally、自定义异常的理解&#xff0c;不过是浮于表面。借着练习的复盘&#xff0c;和大家聊聊我踩过的那些坑&#xff0c;以及对异常处理的新认知。其实异常练习最核心的不是“写出不报错的代码”&#xff0c…

作者头像 李华
网站建设 2026/6/15 11:25:06

IDA Pro macOS版本下载实录:项目应用中的配置经验

IDA Pro macOS 实战部署手记&#xff1a;从下载到逆向环境搭建的完整路径 最近在参与一个移动安全审计项目时&#xff0c;团队需要对多个iOS越狱工具进行深度分析。这类任务绕不开静态反汇编——而说到二进制逆向&#xff0c; IDA Pro 依然是那个“绕不过去的名字”。尽管 G…

作者头像 李华
网站建设 2026/6/15 12:19:39

PyTorch-CUDA-v2.6镜像部署OCR识别系统实战案例

PyTorch-CUDA-v2.6镜像部署OCR识别系统实战案例 在智能文档处理、自动化办公和工业质检等场景中&#xff0c;光学字符识别&#xff08;OCR&#xff09;正从“辅助功能”演变为关键的生产力引擎。然而&#xff0c;许多团队在落地OCR系统时仍面临一个共同困境&#xff1a;模型明…

作者头像 李华
网站建设 2026/6/15 11:19:24

PyTorch-CUDA-v2.6镜像部署RAG检索增强生成系统实战

PyTorch-CUDA-v2.6镜像部署RAG检索增强生成系统实战 在当前大模型驱动的AI浪潮中&#xff0c;如何快速构建一个既能准确回答问题、又能实时调用最新知识的智能系统&#xff0c;已经成为企业与研究团队的核心诉求。传统的语言模型虽然生成能力强&#xff0c;但容易“一本正经地胡…

作者头像 李华
网站建设 2026/6/15 12:26:42

PyTorch-CUDA-v2.6镜像中实现梯度裁剪防止训练爆炸

PyTorch-CUDA-v2.6镜像中实现梯度裁剪防止训练爆炸 在深度学习模型日益复杂、参数量动辄上亿的今天&#xff0c;一个看似微小的技术细节——梯度值异常增大&#xff0c;却可能让数小时甚至数天的训练功亏一篑。你是否曾遇到过这样的场景&#xff1a;模型刚开始训练&#xff0c;…

作者头像 李华
网站建设 2026/6/15 12:30:18

PyTorch-CUDA-v2.6镜像中使用Optuna进行超参数搜索

PyTorch-CUDA-v2.6 镜像中集成 Optuna 实现高效超参数搜索 在深度学习项目开发过程中&#xff0c;一个常见的瓶颈并非模型设计本身&#xff0c;而是如何快速找到一组能让模型性能显著提升的超参数组合。更棘手的是&#xff0c;即便你找到了“好”的参数&#xff0c;换一台机器或…

作者头像 李华