4.5.8 Set接口与HashSet

Java Set接口详解:HashSet、LinkedHashSet与TreeSet对比 Set是Java集合框架中处理唯一性数据的核心接口,通过哈希表或树结构实现元素去重。其底层原理依赖hashCode()和equals()方法保证元素唯一性,时间复杂度从O(1)到O(log n)不等。在工程实践中,HashSet适合快速查找,LinkedHashSet保持插入顺序,TreeSet实现自动排序。典型应用包括数据去重、集合运算和缓存实现,在并发环境下可通过Collections.synchronizedSet或ConcurrentHashMap保证线程安全。掌握Set接口及其实现类的特性,能有效 阅读详情


1.概述

  1. Set是一个不包含重复数据的Collection
  2. Set集合中的数据是无序的(因为Set集合没有下标)
  3. Set集合中的元素不可以重复 – 常用来给数据去重

2.Set集合的特点

  1. 数据无序且数据不允许重复
  2. HashSet : 底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K,存入内部的HashMap中。当然K仍然不许重复。
  3. TreeSet : 底层是TreeMap,也是红黑树的形式,便于查找数据

3.常用方法

学习Collection接口中的方法即可

4.HashSet

4.1 概述

底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K存入内部的HashMap中,其中K不允许重复,允许使用null.
在这里插入图片描述
在这里插入图片描述

4.2 练习: Set相关测试一

package partThree;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/*本类用于测试Set*/
public class TestSet {
    public static void main(String[] args) {
        //1.创建对应的集合对象
        Set<String> set = new HashSet<>();
        //2.存入数据
        set.add("紫霞仙子");
        set.add("至尊宝");
        set.add("蜘蛛精");
        set.add("紫霞仙子");
        set.add(null);
        /*1.set集合中的元素都是没有顺序的
         * 2.set集合中的元素不能重复
         * 3.set集合可以存null值,但是最多只有一个*/
        System.out.println(set);//[蜘蛛精, null, 至尊宝, 紫霞仙子]

        //3.常用方法测试
        System.out.println(set.contains("唐僧"));//false,判断是否包含指定元素
        System.out.println(set.isEmpty());//false,判断是否为空
        System.out.println(set.remove(null));//true,移除指定的元素
        System.out.println(set);//[蜘蛛精, 至尊宝, 紫霞仙子]
        System.out.println(set.size());//3,获取集合中元素的个数
        System.out.println(Arrays.toString(set.toArray()));//[蜘蛛精, 至尊宝, 紫霞仙子],将集合转为数组

        //4.1创建set2集合,并向集合中存入数据
        Set<String> set2 = new HashSet<>();
        set2.add("小兔纸");
        set2.add("小脑斧");
        set2.add("小海疼");
        set2.add("小牛犊");
        System.out.println(set2);//[小兔纸, 小海疼, 小牛犊, 小脑斧]
        System.out.println(set.addAll(set2));//将set2集合的所有元素添加到set集合中
        System.out.println(set);//[蜘蛛精, 小兔纸, 小海疼, 至尊宝, 小牛犊, 小脑斧, 紫霞仙子]
        System.out.println(set.containsAll(set2));//判断set2集合的所有元素是否都在set集合中
        System.out.println(set.removeAll(set2));//删除set集合中属于set2集合的所有元素
        System.out.println(set);//[蜘蛛精, 至尊宝, 紫霞仙子]
        System.out.println(set.retainAll(set2));//只保留set集合中属于set和set2集合的公共元素
        System.out.println(set);//[]

        //5.集合的迭代
        Iterator<String> it = set2.iterator();//5.1获取集合的迭代器
        while(it.hasNext()) {//5.2判断集合是否有下个元素
            String s = it.next();//5.3如果有,进循环获取当前遍历到的元素
            System.out.println(s);
        }
    }
}

4.3 练习: Set相关测试二

  1. 创建自定一引用类型student3
package partThree;

import java.util.Objects;

//1.创建自定义引用类型Student3
public class Student3 {
    //2.创建属性
    String name;//姓名
    int id;//学号

    //3.提供本类的全参构造
    public Student3(String name, int id) {
        this.name = name;
        this.id = id;
    }
    //3.2提供学生类的toString()
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id=" + id +
                '}';
    }
    //3.3添加学生类重写的equals()与hashCode()
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student3 student = (Student3) o;
        return id == student.id && Objects.equals(name, student.name);
    }
    @Override
    public int hashCode() {
        return Objects.hash(name, id);
    }
}

  1. 创建类: TestSet2.java
package partThree;

import java.util.HashSet;
import java.util.Set;

/*本类用于进一步测试set*/
public class TestSet2 {
    public static void main(String[] args) {
        //4.创建集合对象set
        Set<Student3> set = new HashSet<>();

        //5.创建自定义类Student的对象
        Student3 s1 = new Student3("张三",3);
        Student3 s2 = new Student3("李四",4);
        Student3 s3 = new Student3("李四",4);
        //6.将创建好的学生对象存入set集合中
        set.add(s1);
        set.add(s2);
        set.add(s3);
        /*如果set中存放的是我们自定义的类型
         * 需要给自定义类中添加重写的equals()与hashCode(),才会去重
         * 不然会认为s2和s3的地址值不同,是两个不同的对象,不会去重*/
        System.out.println(set);
    }
}

大模型部署指南:SGLang 框架 本文介绍使用 SGLang 框架部署大模型 阅读详情

相关推荐

Metal ECO实战:如何在不修改底层掩模的情况下修复芯片时序问题

本文深入探讨了Metal ECO技术在芯片设计中的应用,这是一种在不修改底层晶体管掩模的前提下,仅通过调整金属连线和替换预置填充单元来修复时序问题的“微创手术”。文章详细解析了其原理、适用场景、关键操作流程与命令,并分享了实战中的高级技巧与常见陷阱,为面临流片前时序违例的工程师提供了宝贵的修复指南。

wdx0123456的博客 423

HashMap与HashSet的区别:Java面试必备知识点

本文对比分析了Java中HashMap和HashSet的核心区别。HashMap实现Map接口存储键值对,使用put()方法添加元素,通过键对象计算哈希值,不允许重复键但允许重复值;HashSet实现Set接口仅存储对象,使用add()方法添加元素,通过成员对象计算哈希值,不允许任何重复元素。关键区别在于HashSet内部实际通过HashMap实现(元素作为键,固定对象作为值)。使用场景上,HashMap适合键值映射和快速查找,HashSet适合去重和集合运算

ywl470812087的博客 10万+

QGIS基于快鸟(QuickBird)影像统计小麦种植面积

​01数据情况 本次选用某地4月份快鸟(QuickBird)影像为例,使用QGIS演示提取小麦播种情况,并按照200米*200米分区计算种植面积的过程。 注:本文对应的操作视频作为今天第二篇推送同时发布,习惯看视频的朋友可以点击观看。 附数据压缩包: 链接:https://pan.baidu.com/s/1JVUS8uAOR61RxC1n9Or9_w 提取码:qgis 含快鸟影像QB_subset.tif和200*200米分区矢量图层200Mgrid.shp。 ...

QGISClass的博客 1970

Set接口介绍、HashSet源码简要分析

1. Set接口 1.1 Set接口基本介绍 无序,(添加和取出顺序不一致),没有索引(Set没有get方法) 不允许重复元素,所以最多包含一个null 取出的顺序虽不是添加的顺序,但顺序其实是固定的, Set底层是数组+链表+红黑树的形式来管理的 1.2 Set接口常用方法 跟List接口一样,Set接口也是Collection的子接口,因此,常用方法和Collection一样,详情可以参见这篇博客: Java集合Collection常用方法详解 1.3 Set接口的遍历方式 同Collectio

qq_51451731的博客 1556

GlobalMapper地形对比与方量计算实战:从两期数据到填挖方区域精准提取

本文详细介绍了使用GlobalMapper进行地形对比与方量计算的实战方法,从两期数据准备到填挖方区域精准提取。通过三步核心操作和实用技巧,帮助工程师高效完成土方平衡分析,提升工程预算精度。特别适用于河道整治、湿地修复等工程项目,大幅减少人工计算误差和时间成本。

weixin_28698059的博客 218

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 411

JavaSE Set接口(HashSet、LinkedHashSet、TreeSet)

Java自我学习路线一、HashSet概述二、HashSet的构造方法1. 无参构造方法2. 有参构造方法三、HashSet常用方法1. add方法2. remove方法四、LinkedHashSet概述 一、HashSet概述 继承关系: HashSet->AbstractSet->AbstractCollection->Collection->Iterable(接口) HashSet是Java集合Set的一个实现类,Set是一个接口,其实现类除HashSet之外,还有TreeS

Lv Zejiang 1695

Hermes Agent 彩蛋大盘点:藏在终端里的浪漫

本文主要介绍了Hermes Agent 彩蛋大盘点:藏在终端里的浪漫,希望能对使用Hermes Agent的同学们有所帮助。 文章目录 1. 前言 2. Spinner 动画 3. Kawaii 表情 4. 思考动词 THINKING_VERBS 5. 皮肤主题 6. 启动 Banner 7. 工具 Emoji 8. 内置人格 9. SOUL.md —— Agent 的灵魂 10. BOOT.md —— 启动自动执行 11. 随机 Tips 12. 统计总览

weixin_43178406的博客 7万+

Java Set接口,HashSet集合

1、Set接口 java.util.Set接口 extends Collection接口 Set接口特点: 1、不允许存储重复的元素 2、没有索引,没有带索引的方法,也不能使用普通的for循环遍历 2、HashSet集合 java.util.HashSet集合 implements Set接口 HashSet特点: 1、不允许存储重复的元素 2、没有索引,没有带索引的方法,也不能使用普通的for循环遍历 3、是一个无序的集合,存储元素和取出元素的顺序有可能不一致。 4、底层是一个哈希表结构(查询的速度非常的

Gaoju12138的博客 209

YOLOv11改进 - 卷积Conv | PATConv(Partial Attention Convolution)部分注意力卷积,在减少计算量的同时融合卷积与注意力的优势 | AAAI 2026

本文提出部分注意力卷积(PATConv)机制,并将其集成到YOLOv11中。传统神经网络中,卷积计算密集,注意力机制全局计算冗余,此前的“部分卷积”会丢失未计算通道的特征价值。PATConv通过“通道拆分 - 并行处理 - 结果拼接”的逻辑,给不同通道分配“擅长的任务”,兼顾局部与全局特征。基于此,它还衍生出PAT_ch、PAT_sp和PAT_sf三种细分模块。此外,还提出了动态部分卷积(DPConv),并构建了新的混合网络家族PartialNet。我们将PATConv代码集成到YOLOv11中,实验表明,

魔改工程师的博客 1078

matlab RANSAC拟合圆柱【2025最新版】

RANSAC拟合圆柱

点云侠的博客 3132

集合的Set的HashSet与TreeSet的详解及其与List的比较

Java 集合框架提供了Set接口,该接口继承自Collection接口。Set接口的主要特点是它不会包含任何重复的元素(即每个元素都是唯一的)。此外,Set不保证元素的顺序,除非使用某些特定的实现类如或TreeSet来保持插入顺序或自然排序。

2301_80163888的博客 845

高级用法:LangChain 安全防护(Guardrails)

在调用开始时校验请求,可做关键词过滤、身份校验、限流等。= "human":return {}],# 使用],= "human":return {}],

Long_像风一样自由 314

Set接口之HashSet、TreeSet、EnumSet

Set接口之HashSet、TreeSet、EnumSet Set接口:与collection基本上完全一样,它没有提供任何额外的方法,实际上set就是collection,只是行为不同(set不允许包含重复元素)。 一、HashSet HashSet是Set接口的典型实现,HashS...

151

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Set集合接口 HashSet与TreeSet理解

Set集合里面并不存在有get()方法。 Set本身也属于接口,而在Set接口下有两个常用的子类:HashSet、TreeSet。 在以后的开发之中,Set集合一定不会作为我们的首选出现。使用最多的依然是List集合。 1.无序存放:HashSet 复制代码 1 package cn.demo; 2 3 import java.util.HashSet; 4 import java

初学者 328

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

28、Java高级特性——集合:Set接口、HashSet集合、Map接口、 Map集合

一、Set接口 二、HashSet集合 1、HashSet类 2、 HashSet集合的特点 3、HashSet集合常用方法 三、HashSet集合代码演示 1、封装属性类 2、集合操作类 3、添加数据:add() 4、返回集合中元素数量:size() 5、遍历HashSet集合的方法 (1)增强for循环 (2)迭代器Iterator 四、Map接口 1、Map接口中的常用方法 2、HashMap类代码演示 (1)准备封装属性类 (2)HashMap实现类

CSDN_Loveletter的博客 1076

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Java】泛型与集合篇 —— Set 接口

TreeSet 是 Java 集合框架中的一个重要类,它实现了 NavigableSet 接口(NavigableSet 接口继承的 SortedSet 接口是 Set 接口的子接口),底层基于红黑树(一种自平衡的二叉搜索树)实现。由于 LinkedHashSet 能保持元素的插入顺序,它适用于需要保证元素插入顺序的场景,例如记录用户的操作历史,在展示时需要按照操作的先后顺序展示,就可以使用 LinkedHashSet 来存储操作记录。使用 Set 对象的批量操作方法,可以实现标准集合代数运算。

m0_72516377的博客 1318

Set之TreeSet与HashSet

上一篇我们讲到Java中的Set方法,他是一个不允许重复元素的集合,今天我们来围绕Set的TreeSet和HashSet进行。HashSetHashSet是基于哈希表实现的,他可以快速的进行插入、删除和查找操作,时间复杂度为O(1) ,HashSet不会保证元素的顺序,原因在于,他是根据元素的哈希值来存储和查询元素的,如果...

weixin_40496328的博客 101

JDK 8 HashSet 详解及详细源码展示

JDK 8中的HashSet是基于HashMap实现的无序集合,内部使用HashMap存储元素(元素作为键,固定对象PRESENT作为值)。它提供O(1)时间复杂度的增删查操作,通过equals()和hashCode()保证元素唯一性。HashSet不保证迭代顺序,非线程安全,适合去重和快速查找场景。使用时需注意哈希码稳定性、线程安全等问题,有序需求可改用LinkedHashSet。核心优势在于利用HashMap实现高效集合操作,理解其底层实现有助于正确使用。

csdn_tom_168的博客 1126

Set,SortedSet,HashSet,LinkedHashSet,TreeSet的介绍

Set集合: 1、无序,不可重复,没有索引,取出的顺序和添加的顺序不一样,但是他是固定的。 2、和List接口一样,Set接口也是Collection的子接口,因此,常用方法和Collection接口一样。 3、可以使用迭代器和增强for遍历,不能使用索引的方式。 SortedSet集合存储元素特点: 首先是无序不可重复的,但是SortedSet集合中的元素是可排序的。 无序:存进去的顺序和取出的顺序不一定相同。另外Set集合中元素没有下标。 不可重复:存进去1,不能在存储1了。 可...

lishifu_的博客 1187

Collection接口的子接口List接口和Set接口

Collection接口的子接口List接口和Set接口

qq_45896330的博客 9955

31.Java之Set集合类(Set 接口基本介绍,HashSet,HashSet 底层机制说明,LinkedHashSet)

31.1 Set 接口基本介绍 无序(添加和取出的顺序不一致),没有索引 不允许重复元素,所以最多包含一个 null 31.2 Set 接口的常用方法 和 List 接口一样,Set 接口也是Collection 的子接口,因此,常用方法和Collection接口一样 31.3 Set 接口的遍历方式 可以使用迭代器 增强 for 不能使用 索引的方式来获取 31.4 HashSet HashSet 实现了 Set 接口 HashSet 实际上是 HashMap public HashSet()

qq_46656580的博客 611

零基础学JAVA--Day33(Set接口+HashSet+LinkedHashSet)

基本介绍1)无序(添加和取出的顺序不一致),没有索引[后面演示]2)不允许重复元素,所以最多包含一个null3)JDK API中Set接口的常用实现类有:HashSet和TreeSet类常用方法1、继承了Collection类,所以可以用它的所有方法2.遍历方式:可以使用迭代器、增强for、

Dxxyyyy的博客 1221

Java集合(5)--Set接口及其实现类HashSet、LinkedHashSet和TreeSet

文章目录Set接口概述HashSet实现类LinkedHashSet实现类TreeSet实现类 Set接口概述 1、Set接口是Collection的子接口,set接口没有定义额外的方法,使用的都是Collection接口中的方法。 2、Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set 集合中,则添加操作失败。 3、Set:存储无序的、不可重复的数据 (以HashSet为例说明) ①无序性:不等于随机性。存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值。

叶绿体不忘呼吸 574

尚硅谷Java笔记-Set接口 | HashSet | LinkedHashSet

如果不重写HashCode和equals方法,默认调用的是Object中的,那么不容的对象,肯定哈希值不一样并且也不相等。【如果重写了HashCode方法,那么计算的就是对象内容的哈希值】哈希值是由计算机算出来的一个十进制数,可以看作是对象的地址值。1.先 计算元素的哈希值(重写hashCode方法),在比较内容(重写equals方法)哈希值一样,内容也可能不一样(存在哈希冲突)。b. 如果哈希值一样,内容也一样,去重复。a. 如果哈希值一样,内容不一样,存储。2.先比较哈希值,如果哈希值不一样,存储。

qq_63202362的博客 411

Set接口,实现类HashSet,TreepSet

Set 接口 实现类HashSet

qq_45259214的博客 188
上一篇: 4.5.7 HashMap
下一篇: 4.6 设计模式-单例设计模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值