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

Java 实战:去重与排序(HashSet+TreeSet 应用)

Java-day20-3

一、项目需求分析

设计一个整数列表的去重与排序工具,核心需求如下:

1. 使用 ArrayList 存储包含重复元素的原始整数列表;

2. 使用 HashSet 对原始列表进行去重(利用其“不可重复”特性);

3. 使用 TreeSet 或 Collections.sort() 对去重后的元素进行升序排序;

4. 输出原始列表、去重后的列表、排序后的最终列表。

**技术选型**:

- 原始存储:ArrayList(支持重复元素,方便接收用户输入或初始化);

- 去重工具:HashSet(自动去重,无需手动判断重复);

- 排序工具:TreeSet(自动升序排序)或 Collections.sort()(手动排序去重后的列表);

- 核心技术:集合间的转换、HashSet 去重特性、TreeSet 排序特性。

二、项目实现步骤

2.1 方案1:HashSet 去重 + TreeSet 排序(推荐,简洁高效)

利用 HashSet 快速去重,再通过 TreeSet 自动升序排序,无需手动编写排序逻辑。

```java

import java.util.ArrayList;import java.util.HashSet;import java.util.TreeSet;/*** 整数列表去重与排序:HashSet去重 + TreeSet排序*/public class DeduplicationAndSort {public static void main(String[] args) {// 步骤1:初始化原始整数列表(包含重复元素)ArrayList originalList = new ArrayList<>();// 手动添加测试数据,也可通过控制台输入扩展originalList.add(5);originalList.add(2);originalList.add(8);originalList.add(2);originalList.add(10);originalList.add(5);originalList.add(3);originalList.add(8);System.out.println("原始列表(含重复元素):" + originalList);// 步骤2:使用HashSet去重(HashSet不允许重复元素)HashSet uniqueSet = new HashSet<>(originalList);System.out.println("去重后的列表(无序):" + uniqueSet);// 步骤3:使用TreeSet排序(TreeSet自动按自然顺序升序排序)TreeSet sortedSet = new TreeSet<>(uniqueSet);System.out.println("去重并升序排序后的列表:" + sortedSet);// 可选:将TreeSet转换为ArrayList(如需列表格式输出)ArrayList resultList = new ArrayList<>(sortedSet);System.out.println("最终结果(ArrayList格式):" + resultList);}}

```

2.2 方案2:HashSet 去重 + Collections.sort() 排序(灵活可控)

若需自定义排序规则(如降序),可先通过 HashSet 去重,再转换为 ArrayList 后用 Collections.sort() 排序。

```java

import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;/*** 整数列表去重与排序:HashSet去重 + Collections.sort()排序*/public class DeduplicationAndSort2 {public static void main(String[] args) {// 步骤1:初始化原始整数列表ArrayList originalList = new ArrayList<>();originalList.add(5);originalList.add(2);originalList.add(8);originalList.add(2);originalList.add(10);originalList.add(5);originalList.add(3);originalList.add(8);System.out.println("原始列表(含重复元素):" + originalList);// 步骤2:HashSet去重HashSet uniqueSet = new HashSet<>(originalList);ArrayList uniqueList = new ArrayList<>(uniqueSet); // 转换为列表System.out.println("去重后的列表(无序):" + uniqueList);// 步骤3:Collections.sort()排序(默认升序)Collections.sort(uniqueList);System.out.println("去重并升序排序后的列表:" + uniqueList);// 扩展:自定义降序排序(Lambda表达式简化)Collections.sort(uniqueList, (a, b) -> b - a);System.out.println("去重并降序排序后的列表:" + uniqueList);}}

```

三、核心技术解析

3.1 HashSet 去重原理

- HashSet 底层基于 HashMap 实现,其核心特性是“**元素不可重复**”;

- 当向 HashSet 添加元素时,会先通过元素的 hashCode() 和 equals() 方法判断是否已存在,存在则不添加,从而实现自动去重;

- 优点:去重效率高(时间复杂度 O(1)),无需手动遍历判断重复。

3.2 TreeSet 排序原理

- TreeSet 底层基于红黑树实现,其核心特性是“**元素有序**”(默认按自然顺序升序);

- 存储的元素必须实现 Comparable 接口(Integer 已实现),或在创建 TreeSet 时指定 Comparator 比较器;

- 优点:去重+排序一步到位,代码简洁,适合只需升序排序的场景。

3.3 Collections.sort() 排序特性

- Collections.sort(List) 是 Java 提供的工具方法,默认按自然顺序升序排序;

- 支持自定义排序规则,通过传入 Comparator 接口实现(Lambda 表达式可简化代码);

- 灵活度高,可实现升序、降序或复杂排序逻辑,适合需要自定义排序的场景。

四、运行效果演示

4.1 方案1 运行结果

原始列表(含重复元素):[5, 2, 8, 2, 10, 5, 3, 8]

去重后的列表(无序):[2, 3, 5, 8, 10]

去重并升序排序后的列表:[2, 3, 5, 8, 10]

最终结果(ArrayList格式):[2, 3, 5, 8, 10]

4.2 方案2 运行结果

原始列表(含重复元素):[5, 2, 8, 2, 10, 5, 3, 8]

去重后的列表(无序):[2, 3, 5, 8, 10]

去重并升序排序后的列表:[2, 3, 5, 8, 10]

去重并降序排序后的列表:[10, 8, 5, 3, 2]

五、扩展功能:控制台输入原始列表

若需从控制台接收用户输入的整数列表,可扩展如下:

```java

import java.util.ArrayList;import java.util.HashSet;import java.util.Scanner;import java.util.TreeSet;public class DeduplicationAndSortWithInput {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);ArrayList originalList = new ArrayList<>();System.out.print("请输入整数(用空格分隔,输入完成后按回车):");String input = scanner.nextLine();String[] numStrs = input.split(" ");// 转换为整数并添加到原始列表for (String str : numStrs) {originalList.add(Integer.parseInt(str));}// 去重+排序(方案1)HashSet uniqueSet = new HashSet<>(originalList);TreeSet sortedSet = new TreeSet<>(uniqueSet);System.out.println("原始列表:" + originalList);System.out.println("去重排序后:" + sortedSet);scanner.close();}}

```

**输入**:7 3 9 3 2 7 1 9

**输出**:

原始列表:[7, 3, 9, 3, 2, 7, 1, 9]

去重排序后:[1, 2, 3, 7, 9]

六、总结:项目实战要点

1. **去重选型**:HashSet 是去重的最优选择,自动去重且效率高,无需手动处理重复逻辑;

2. **排序选型**:

- 需默认升序排序:直接用 TreeSet(去重+排序一步到位);

- 需自定义排序(如降序):用 HashSet 去重后,通过 Collections.sort() 实现;

3. **集合转换**:ArrayList、HashSet、TreeSet 可通过构造函数相互转换,灵活适配不同需求。

本项目是 HashSet 和 TreeSet 集合的经典实战,覆盖了去重、排序、集合转换等核心知识点。通过实际运行,可深入理解不同集合的特性与适用场景,为后续处理“去重+排序”类需求提供高效解决方案。

http://www.dtcms.com/a/614657.html

相关文章:

  • 命令行核心概念:信号、标准流与作业控制 (对比 Unix, cmd.exe, PowerShell)
  • wordpress仿站难吗央视优购物官方网站
  • 网站设计设计目的漳州做网站含博大选
  • 阿里云网站301重定向怎么做买证书网站开发工程师
  • 北京网站搜索引擎优化江苏宿迁房产网
  • 丽水市莲都区建设局网站计算机网络服务
  • WordPress做的网站源代码共享ip服务器做网站
  • 中国建设企业银行官网站深州做网站公司
  • 桐乡建设局网站高校网站建设方案
  • 青岛三吉互联网站建设公司945新开传奇网站
  • 【Chrono库】Chrono 时间舍入模块解析(round.rs)
  • 网站建设微信文章企业建网站费用
  • 二十二、注意力机制与序列模型
  • 花垣做网站怎么上传软件到网站
  • Spring Boot+Vue项目从零入手
  • 【BuildFlow 筑流】MonthDuration 类型深度解析及源码
  • 中铁中基建设集团网站同一服务器建两个wordpress
  • C语言编译软件的获取与选择方法 | 如何挑选适合的C语言编译工具
  • 电子商务网站建设设计报告网推app下载
  • 华为云建网站网站建设情况 报告
  • 做地方分类信息网站需要什么资质吗大沥南庄网站建设
  • 企业网站备案信息查询备案时注意网站名称规范
  • 如何做vip微信电影网站抖音珠宝代运营
  • 2025年--Lc267-7. 整数反转-Java版
  • 从零开始学二叉树(中):堆与完全二叉树的奥秘
  • 嘉兴网站建设嘉兴成都p2p网站建设
  • 旅游网站策划书设计颜色搭配网站
  • 选择AI决策解决方案需要注意哪些安全和数据隐私问题?
  • asp建设的网站制作外贸网站空间哪个好
  • 算法笔记 12 哈希表 | 图