当前位置: 首页 > news >正文

吃透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集合的经典练习题或疑问,欢迎在评论区交流~

http://www.zskr.cn/news/172083.html

相关文章:

  • hbuilderx制作网页完整指南:集成 Git 进行版本控制
  • 通俗解释USB接口有几种命名规则
  • PyTorch-CUDA-v2.6镜像中使用Albumentations进行数据增强
  • QListView基本架构解析:系统学习起步
  • Times New Roman字体可用在商标注册不!
  • PyTorch-CUDA-v2.6镜像运行DreamBooth个性化图像生成
  • 卖农产品小米侵权?“小米”牌小米商标已被注销!
  • AI系统在处理稀疏奖励环境时的探索策略
  • 2025年大模型六大突破,从小白到专家必看,2025大模型年度回顾
  • 基于STM32的智能空气质量检测系统
  • 推荐阅读:Python在数据分析中的价值与实践路径
  • 为什么 NAT Gateway 一定在 Public Subnet?
  • CH340转USB-Serial Controller D常见识别问题解析
  • 一文说清8个基本门电路图:初学者通俗解释
  • SpringBoot+Vue 社区物资交易互助平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • Day 52 神经网络调参指南
  • 前后端分离社区医疗服务可视化系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • PyTorch-CUDA-v2.6镜像中实现梯度裁剪防止训练爆炸
  • 企业级社区疫情返乡管控系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • PyTorch-CUDA-v2.6镜像部署Flask API对外提供模型服务
  • SpringBoot+Vue 社区医疗服务系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • SpringBoot+Vue 数字化农家乐管理平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 剩余参数与arguments对比:ES6语法机制图解说明
  • 嘉立创EDA画PCB教程:差分信号原理图处理技巧实战案例
  • 搞过自驾的小伙伴,在其他领域还是很抢手
  • 零基础掌握SystemVerilog接口(interface)应用方法
  • 杨建允:AI搜索优化如何赋能私域电商?
  • PyTorch-CUDA-v2.6镜像下使用AMP自动混合精度训练教程
  • PyTorch-CUDA-v2.6镜像运行Mask R-CNN实例分割模型实录
  • PyTorch-CUDA-v2.6镜像支持ONNX导出吗?转换流程详解