做题时HashSet、TreeSet、LinkedHashSet的选择
一、HashSet
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。
代码:
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;class Person
{String name;int id;public Person(String name, int id) {this.name = name;this.id = id;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", id=" + id +'}';}
}
public class Main2 {public static void main(String[] args) {Set<String> set1=new HashSet<>();Set<Person> set2=new HashSet<>();set1.add("abc");set1.add("def");set1.add("aaa");set1.add("xzz");set1.add("xyz");Person p1=new Person("zhangsan",1);Person p2=new Person("lisi",3);Person p3=new Person("zhaoyiming",2);set2.add(p1);set2.add(p2);set2.add(p3);for(String i:set1){System.out.print(i+" ");}System.out.println();for (Person person:set2){System.out.print(person+" ");}}
}
运行结果:

虽然看似其输出结果是有序的,一些时候可以认为进行默认规则排序:字母和数字从小到大,字符串或中文随机存储。但不能认为其有序。
- 无序性:HashSet 是无序的,即不会记录插入的顺序。
常见问题 1(ConcurrentModificationException)
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
常见异常代码:
(可自行将其中的HashSet改为LinkedHashSet和TreeSet,运行)
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;public class Main1 {public static void main(String[] args) {Set<String> set1=new HashSet<>();set1.add("howAreU");set1.add("Fine");set1.add("thankU");set1.add("andYou");set1.add("ok");for(String s:set1){if(s.equals("Fine"))set1.remove(s);}//set1.removeIf(s -> s.equals("Fine"));//可以用这句替换}
}
运行结果:

常见问题2:自定义排序
HashSet实际上是一个 HashMap 实例,不支持自定义排序,可以认为其只关心元素是否唯一,不关心其顺序。无论是实现Comparator还是Comparable都不会影响其中元素的顺序。
( 排序->Treeset )
二、LinkedHashSet
按照插入顺序排序,且不受重新插入的元素影响。即相当于只算第一次插入。
是HashSet的子类,同HashSet一样,不是线程安全,也不支持自定义排序。
题目中要求按照输入顺序输出时,基本上可以用。
三、TreeSet
默认规则排序(字母和数字)从小到大。如果其中元素是对象,则按照第一个属性排序
不是线程安全,支持自定义排序。
自定义排序演示代码:
import java.util.*;class Person implements Comparable
{String name;int id;public Person(String name, int id) {this.name = name;this.id = id;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", id=" + id +'}';}@Overridepublic int compareTo(Object o) { //定义排序标准,这里按照id从小到大Person p=(Person) o;return this.id-p.id;}
}
public class Main2 {public static void main(String[] args) {Set<Person> set2=new TreeSet<>();Person p1=new Person("zhangsan",1);Person p2=new Person("lisi",3);Person p3=new Person("zhaoyiming",2);set2.add(p1);set2.add(p2);set2.add(p3);for (Person person:set2){System.out.println(person+" ");}}
}
运行结果 :

我对Java接触不深,仍有太多太多要学,如有错误欢迎指出,感谢。
相关文章:
做题时HashSet、TreeSet、LinkedHashSet的选择
一、HashSet 此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。 代码: import java.util.HashSet; import java.util.LinkedHashSet; import ja…...
Manus手套动作捕捉AI训练灵巧手
随着人工智能(AI)和机器人技术的融合日益紧密,使用真实动作数据AI扩容训练机器人的方式正在被用于开发更富表现力的机器人。Manus手套凭借精准的动作捕捉技术和导出数据的强大兼容性,在灵巧手的研发和应用中发挥了重要作用。 手部…...
嵌入式驱动开发详解4(内核定时器)
文章目录 前言通用定时器系统节拍节拍数与时间转换基本框架定时器使用代码展示通用定时器特点 高精度定时器 前言 LInux内核定时器是一种基于未来时间点的计时方式,以当前时刻来启动的时间点,以未来的某一时刻为终止点。比如,现在是10点5分&…...
Linux:信号的预备和产生
引入: 比如当前快递小哥需要通知你下来取快递(产生信号),然后通过电话或短信告知了你(发送信号),但是当前你正在打游戏,所以你并不会马上去处理,但是你会记得这件事&…...
国城杯2024——Curve
相关知识链接:https://tangcuxiaojikuai.xyz/post/187210a7.html #sagemath from Crypto.Util.number import *def add(P, Q):(x1, y1) P(x2, y2) Qx3 (x1*y2 y1*x2) * inverse(1 d*x1*x2*y1*y2, p) % py3 (y1*y2 - a*x1*x2) * inverse(1 - d*x1*x2*y1*y2, p…...
AI生成不了复杂前端页面?也许有解决方案了
在2024年,编程成为了人工智能领域最热门的赛道。AI编程技术正以惊人的速度进步,但在生成前端页面方面,AI的能力还是饱受质疑。自从ScriptEcho平台上线以来,我们收到了不少用户的反馈,他们表示:“生成的页面…...
常见矩阵分析法(BCG、GE、IE、SPACE、TOWS、优先、战略优先级、安索夫、风险矩阵):如何通过系统化方法助力战略决策与数据驱动决策
在快速变化的商业环境中,企业决策者面临着诸多复杂的选择与挑战。矩阵分析法作为战略分析的重要工具,能够系统化地分析企业的内外部环境,帮助管理层做出更加科学、合理的决策。本文将全面解析常见的矩阵分析法,并探讨它们在数据驱…...
JWT 在 SaaS 系统中的作用与分布式 SaaS 系统设计的最佳实践
在现代 SaaS(软件即服务) 系统中,随着服务规模的扩大和用户需求的多样化,如何高效、安全地进行用户身份验证、权限控制以及租户隔离,成为了系统架构中的核心问题之一。**JWT(JSON Web Token)**作…...
基于C#和Sql Server的网上书店管理系统
基于C#和Sql Server的网上书店管理系统 摘要 本系统是建立在 Windows 平台上,基于 B/S 结构的一个网上书店。通过这个网上书店,可以实 现简单的电子商务功能。 整个网站风格一致,较为美观,有完善的导航机制。普通用户从前台首页…...
特高频局放装置在现代配电设施中的应用
引言 随着电力系统的快速发展,尤其是现代配电系统的不断升和智能化,配电网的安全、稳定和运行变得愈发重要。为了确保电力系统能够及时应对各种运行问题,并提高故障诊断和监控的能力,现代配电系统中的监测技术也不断得到创新与提…...
FSC认证是什么?FSC认证费用
FSC认证是指森林管理委员会(Forest Stewardship Council)颁发的一种认证,以下是对FSC认证的详细介绍: 一、FSC认证的定义与目的 FSC认证标志着一件产品来自经过环境友好、社会有益和经济可行的可持续管理的森林。FSC是一个独立的…...
JAVA数据结构
1.数组 (Array): 固定大小的容器,用于存储相同类型的元素,数组在内存中是连续存储的,支持通过索引快 速访问元素。 int[] numbers = new int[10]; numbers[0] = 1;2.Java Collections Framework (JCF) JCF提供了一组接口和类用于管理和操作集合(如列表,集合,…...
mysql8 主从复制一直失败
问题描述: 开启同步后从服务器一直失败,报错如下: Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log …...
EDA - Spring Boot构建基于事件驱动的消息系统
文章目录 概述事件驱动架构的基本概念工程结构Code创建事件和事件处理器创建事件总线创建消息通道和发送逻辑创建事件处理器消息持久化创建消息发送事件配置 Spring Boot 启动类测试运行项目 概述 在微服务架构和大规模分布式系统中,事件驱动架构(EDA&a…...
使用vue-seamless-scroll实现echarts图表大屏滚动,出现空白间隔的解决方案
一、背景介绍 最近的业务开发需求,想要实现echarts图表大屏滚动,小编首先采用vue-seamless-scroll进行实现,结果发现第二屏出现空白间隔,尝试了多种解决方案均不生效,最终选择换一个方案。 二、封装的ScrollList组件…...
ios使用UIScrollView和PageControl创建图片轮播
1.创建cocoa touch class 2.同时创建xib页面 3.SceneDelegate设置根视图控制器 // // SceneDelegate.m // iosstudy2024 // // Created by figo on 2024/8/5. //#import "SceneDelegate.h" #import "WidgetViewController.h"interface SceneDelegate …...
3D 生成重建024-LGM第一个开源的3D生成大模型!
3D 生成重建024-LGM第一个开源的3D生成大模型 文章目录 0 论文工作1 论文方法2 实验效果 0 论文工作 这篇论文介绍了一种名为LGM(大型多视角高斯模型)的新方法,用于从单视角图像或文本提示生成高分辨率的三维内容。该方法的核心思想是双重的…...
linux目录权限
一、目录权限的基本概念 Linux中的每个文件和目录都有与之关联的权限,这些权限决定了谁可以读取、写入或执行它们。权限分为三组: 所有者(Owner)权限:目录所有者的权限群组(Group)权限&#x…...
语言模型使用心得
使用像文心一言这样的语言模型,在撰写文章时确实能提供极大的帮助。然而,重要的是我们要明确主次关系:自己的创意和内容应当是文章的核心,而语言模型则扮演着一个辅助角色,帮助我们梳理思路,使文章条理更加…...
ChatGPT客户端安装教程(附下载链接)
用惯了各类AI的我们发现每天打开网页还挺不习惯和麻烦,突然发现客户端上架了,懂摸鱼的人都知道这里面的道行有多深,话不多说,开整! 以下是ChatGPT客户端的详细安装教程,适用于Windows和Mac系统:…...
ANIMATEDIFF PRO教学创新:Jupyter Notebook交互式教程
ANIMATEDIFF PRO教学创新:Jupyter Notebook交互式教程 让AI动画学习变得像玩游戏一样有趣,实时调整参数,即刻看到效果变化 1. 引言:为什么需要交互式动画教学? 传统的AI动画教学有个痛点:学生写了一大段代…...
理视康新零售系统开发要点
业务模式设计新零售模式需整合线上线下渠道,构建会员体系、分销机制与数据中台。通过小程序、APP或H5实现线上商城,线下门店采用智能硬件(如AR试戴、智能货架)提升体验。结合LBS技术实现附近门店导流,支持到店自提或同…...
java打卡学习6:集合框架 Collection
集合框架概述集合框架(Collection Framework)是Java中用于存储、操作和传输数据的标准化架构。它提供了一组接口、实现类和算法,用于处理对象集合,简化了数据结构的操作。核心目标:性能优异:提供不同数据结…...
QGC二次开发---多机协同任务中的智能框选与指令批量下发
1. 多机协同作业的核心痛点与解决方案 在农业植保、物流配送等需要多架无人机协同作业的场景中,操作人员经常面临一个棘手问题:如何快速选择特定区域的无人机并批量下发指令?传统方法需要逐个点击无人机图标,效率低下且容易出错。…...
Phi-4-mini-reasoning作品集:自动将推理过程转化为教学级讲解语言
Phi-4-mini-reasoning作品集:自动将推理过程转化为教学级讲解语言 1. 模型简介 Phi-4-mini-reasoning是一个轻量级的开源文本生成模型,专注于将复杂推理过程转化为清晰易懂的教学语言。作为Phi-4模型家族的一员,它特别擅长处理需要逐步解释…...
别再只盯着细胞比例了!用Xenium数据做小鼠肺腺癌空间邻域分析,手把手教你找到真正的肿瘤边界
空间邻域分析:重新定义肿瘤微环境的生物学边界 在单细胞和空间组学研究中,我们常常陷入一个思维定式——过度关注细胞类型的比例变化,却忽略了细胞在三维空间中的精妙排布所蕴含的关键信息。这种比例优先的思维模式,就像试图通过统…...
STM32F407的RTC时钟不准?手把手教你用CubeMX配置LSE晶振校准(附源码)
STM32F407的RTC时钟不准?手把手教你用CubeMX配置LSE晶振校准(附源码) 在嵌入式系统开发中,实时时钟(RTC)的精度问题常常让开发者头疼。特别是使用STM32F407这类主流单片机时,即使按照官方文档配…...
智能驱动,精准雾化:探秘微孔雾化片专用IC的自适应频率与无水保护
1. 微孔雾化技术的前世今生 第一次拆解家用加湿器时,我被那片直径不到3cm的金属薄片震惊了——它竟能凭空"变"出细腻的水雾。这就是微孔雾化片,通过每秒10万次以上的高频振动将液态水"打碎"成微米级颗粒。但要让这片金属薄片稳定工作…...
单片机存储系统:哈佛架构与ROM/RAM技术解析
1. 单片机存储系统概述单片机作为微型计算机系统的核心,其存储架构直接决定了系统的性能和功能实现方式。与通用计算机不同,单片机的存储系统通常采用哈佛结构,将程序存储器和数据存储器物理分离。这种设计源于早期计算机科学家对处理器效率的…...
安装lsaac lab
在 Ubuntu 22.04 环境下,使用 Conda 管理 Isaac Lab 是最稳妥的方案,因为它可以完美隔离 Isaac Sim 所需的特定 Python 版本环境。以下是基于 Conda 的保姆级安装步骤:第一步:创建 Conda 环境Isaac Sim 4.x 需要 Python 3.10&…...
