做题时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;
    }

    @Override
    public 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;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", id=" + id +
                '}';
    }
    
    @Override
    public 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接触不深,仍有太多太多要学,如有错误欢迎指出,感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/933565.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Rive】Android与Rive交互

1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationViewandroid:id"id/rive_view"android:layout_width"match_parent"android:layout_height"match_parent"android:adjustViewBounds"…

【Linux】通过crond服务设置定时执行shell脚本,实际执行时间却延迟了8小时

一、问题描述 通过使用crond服务设置定时任务&#xff0c;在每天凌晨的2:00执行脚本&#xff0c;但检查结果时发现&#xff0c;实际执行时间却在上午10点。 检查shell脚本执行结果发现&#xff0c;实际执行脚本时间在上午10:00&#xff0c;延迟了8小时。 检查系统时间&#xf…

Kubesphere上搭建Nacos集群

Kubesphere上搭建Nacos集群 使用最新版本&#xff1a;nacos/nacos-server 1&#xff09;先创建一个有状态副本集&#xff0c;获取到dns 2&#xff09;创建集群配置文件 cluster.conf&#xff1a; mp-nacos-0.mp-nacos-lex8.mp-prod.svc.cluster.local:8848 mp-nacos-1.mp-n…

鸿蒙ArkTS如何实现数据可视化:饼状图/柱状图/折线图

鸿蒙数据可视化系列 在我们鸿蒙APP开发中&#xff0c;经常需要使用到一些图表的开发&#xff0c;本文主要介绍使用 McCharts 框架绘制柱状图的方法 配套指导视频地址&#xff1a;鸿蒙数据可视化系列-McCharts使用介绍_哔哩哔哩_bilibili 1. 第三方库介绍 1.1. McCharts Mc…

锐捷网络设备常用命令(交换机、路由器)

因公司办公网络设备转为锐捷产品&#xff0c;特此学习一些锐捷交换机和路由器的相关配置&#xff1a; enable 进入特权模式 configure terminal 进入全局模式 logging on 日志显示&#xff08;默认&#xff09; no logging on 关闭日志显示 exit 返回上一层 end 返回到特权模式…

一文读懂模型的数据集Datasets

众所周知&#xff0c;数据集&#xff08;Datasets&#xff09;对于模型来说非常重要&#xff0c;它是大模型这台庞大机器的原材料&#xff0c;在机器学习领域中所有的原生模型都是通过数据集训练出来的。本文将以通俗易懂的方式为大家介绍一下大模型的数据集&#xff0c;让大家…

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…

C语言 静态变量 +静态函数

静态局部变量 特点 静态局部变量常用于需要在函数调用之间保持数据持久性和状态的情况&#xff0c;例如计数器、缓存等。 静态全局变量 特点 静态全局变量适用于在当前源文件内共享数据&#xff0c;但希望限制其它源文件的访问权限的情况。它们可以避免全局命名空间的干扰&…

A6481 基于Java+mysql+Vue+MySQL+uni-app在线商城系统微信小程序的设计与实现 配置 源码 全套资料

在线商城系统微信小程序 1.摘要2. 系统开发的目的和意义3.功能结构4.界面展示5.源码获取 1.摘要 随着信息时代的发展&#xff0c;用户的消费水平也在不断的上升&#xff0c;传统超市以及电子商务在线上推广和购物体验等方面也到了一个瓶颈期。淘宝、京东等购物平台需要占手机更…

TEA系列例题

解析 TEA 加密算法(C语言、python)&#xff1a;_tea加密-CSDN博客 CTF-RE 从0到N: TEA_tea加密原理-CSDN博客 1 字节 8 位 牢记密文的64位和密钥的128位,最好可以自己独立的写出tea解密代码 相当于密文是传入8个字符类型数据或者是2个整型数据, 密钥是16个字符数据或者4个…

静态属性与实例属性:深入理解Java中的属性类型

在Java编程中&#xff0c;属性&#xff08;也称为字段&#xff09;是类的重要组成部分&#xff0c;它们用于存储对象的状态。根据属性的作用范围和生命周期&#xff0c;Java中的属性可以分为两类&#xff1a;静态属性&#xff08;Static Attributes&#xff09;和实例属性&…

洞察企业税务全面风险!

2020年底OECD《税收征管3.0&#xff1a;税收征管的数字化转型》的发布&#xff0c;拉开了全球各国税收征管数字化转型帷幕。中国政府积极响应&#xff0c;依托金税四期工程陆续推出全国统一电子税务局、乐企平台等系统&#xff0c;为企业税务数智化转型提供有效支撑。 用友积极…

快速搭建SpringBoot3+Vue3+ElementPlus管理系统

快速搭建SpringBoot3Vue3管理系统 前端项目搭建&#xff08;默认开发环境&#xff1a;node20,Jdk17&#xff09;创建项目并下载依赖--执行以下命令 前端项目搭建&#xff08;默认开发环境&#xff1a;node20,Jdk17&#xff09; 创建项目并下载依赖–执行以下命令 创建项目 y…

链式设计模式——装饰模式和职责链模式

一、装饰模式 1、概述 动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更为灵活。 ConcreteComponent &#xff1a;是定义了一个具体的对象&#xff0c;可以给这个对象添加一些职责&#xff1b;Decorator &#xff1a;装饰抽象…

【Elasticsearch】实现用户行为分析

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

Linux评估网络性能

网络性能直接影响应用程序对外提供服务的稳定性和可靠性 ping命令检测网络的连通性 如果网络反应缓慢&#xff0c;或连接中断&#xff0c;可以用ping来测试网络的连通情况 time值(单位为毫秒)显示了两台主机之间的网络延时情况。如果此值很大&#xff0c;则表示网络的延时很大…

工业智能网关如何为企业实现智能制造赋能?

在数字化转型的浪潮中&#xff0c;工业智能网关作为连接物理世界与数字世界的桥梁&#xff0c;正逐步成为智能制造领域的核心组件。本文将通过一个实际使用案例&#xff0c;深入剖析工业智能网关如何助力企业实现生产流程的优化、数据的高效采集与分析&#xff0c;以及智能化决…

【LLMs】用LM Studio本地部署离线大语言模型

文章目录 一、下载LM Studio二、下载大语言模型1. 查看模型介绍2. 点击模型文件进行下载2.1 完整下载2.2 部分下载 三、加载模型1. 打开LM Studio图形化界面&#xff0c;点击**My Models**2. 然后&#xff0c;点击“...”&#xff0c;选择“change”&#xff0c;选择刚下载好的…

Python_Flask04(牛马问答平台01)

项目名称&#xff1a;牛马问答平台 项目简介&#xff1a;1.主要用来给社会上的牛马们探讨老板的恶心之处。 2. 用来学习交流。 技术手段&#xff1a;Python3.x Flask render_template pymysql flask_sqlalchemy........ 注意该博客为迭代项目&#xff0c;于最后一期展示完整…

【时时三省】(C语言基础)结构体内存对齐练习题

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 练习一 这个输出结果是8 练习二 这个输出结果是16 练习三 这个输出结果是32 上面的输出结果都是根据结构体对齐规则来计算的