【Java高级特性】java学习之旅22-Set集合

手把手教你学基带SOC芯片(4.4.9)--基带芯片的电源管理实例:高通 Snapdragon 系列实例(十) Snapdragon 888 通过支持多种深度睡眠模式,如 AOAC 模式、低功耗模式和深度睡眠模式,以及智能电源管理技术,实现了对功耗的精细管理。这些模式不仅延长了设备的电池寿命,还确保了用户在各种使用场景下的良好体验。无论是保持网络连接、限制后台活动,还是完全关闭不必要的功能,Snapdragon 888 都能够灵活应对,提供高效的功耗管理方案。 阅读详情

HashSet

特征:

  1. 底层实现是HashMap的key
  2. 默认初始化的容量是16,默认的加载因子是0.75
  3. 当存储容量达到原容量的0.75时,扩容为原容量的2倍
  4. 不保证顺序、唯一、可以为null、无索引
  5. 查找较慢、插入删除较快
  6. 线程不同步的,多线程使用不安全,实现同步Set set = Collections.synchronizedSet(new HashSet(…))

常用的方法:

    add(E e)(要增加的元素)
    
    size()//获取集合的长度
    
    remove(Object o)(想要删除的元素)
    
    clear()//清空
    
    isEmpty()//判断是否为空
    
    contains(Object o)(判断包含的元素)
    
    iterator()//irerator遍历器
    

注意事项:

  1. HashSet按照按照什么逻辑排序

不保证顺序,存入的顺序和实际元素排列顺序无关,获取元素的先后顺序由Map中的hash()方法得到的混淆后的hash值决定。

  1. HashSet扩容是否有上限

HashMap限定了最大容量:MAXIMUM_CAPACITY = 1 << 30;

基本的创建以及赋值:

@Test
	public void test1() {
		HashSet<String> set1 = new HashSet<>();
		
		set1.add("王子玉");
		set1.add("吴青山");
		set1.add("钟雪");
		set1.add("任玉文");
		
		System.out.println(set1);
	}

遍历:

//迭代器遍历
Iterator<Integer> it = set2.iterator();
		while (it.hasNext()) {
			Integer i = (Integer) it.next();
			System.out.println(i);
			
		}
		
//foreach遍历
		for (Integer i : set2) {
			System.out.println(i);
		}

排序的依据:

@Test
	public void test3() {
		String key1 = "tom";
		int h1;
		//根据获得的值进行排序
		int i1 = (h1 = key1.hashCode()) ^ (h1 >>> 16);
		System.out.println(i1);
		
		String key2 = "hello";
		int h2;
		int i2 = (h2 = key2.hashCode()) ^ (h2 >>> 16);
		System.out.println(i2);
	}

LinkedHashSet

特征:

  1. 继承了HashSet类,底层实现HashMap,数据结构式链表
  2. 保证顺序、唯一的、可以为null
  3. 查找较慢、插入删除较快
  4. 线程不同步、多线程使用不安全,如果要实现线程同步的set
  5. Set set = Collections.synchroizedSet(new LinkedHashSet());

常用方法:

  • 可以参考HashSet

基本的创建语句和赋值:

public static void main(String[] args) {
		
		LinkedHashSet<String> set = new LinkedHashSet<>();
		
		set.add("吴青山");
		set.add("吴青山");
		set.add("王子玉");
		set.add("任玉文");
		set.add(null);
		
		System.out.println(set);
		
		System.out.println(set.remove("吴青山"));
		System.out.println(set);
		
	}

TreeSet

特征:

  1. 底层实现是TreeMap,数据结构是二叉树
  2. 不保证排序,但是可以自定义排序、唯一、可以为null
  3. 线程不同步、多线程使用不安全,如果要实现同步的set
  4. Sorted set = Collection.synchroizedSortedSet(new TreeSet(…))
  5. TreeSet集合只能存处可排序的对象(如果对象不可排序,会报错。)
  6. 如何实现排序
让元素具有排序的功能
   元素类实现Comparable接口,重写comparTo方法
   1. 在元素被添加进容器时,会调用compareTo方发和已存在的元素进行比较
   2. 如果返回的int值是正数,这个元素排在被比较的元素后面
   3. 如果返回的int值是负数,这个元素排在被比较的元素前面
   4. 如果返回的int值是0,表示无法比较,这个元素无法添加进容器里面
   
让容器具有排序的功能
    1. 创建一个比较器的类,实现Comparator,重写compara方法
    2. 使用有参构造创建TreeSet,参数就是比较器类的对象

创建和赋值:

@Test
	public void test1() {
		TreeSet<String> set = new TreeSet<>();
		
		set.add("王子玉");
		set.add("韩文龙");
		set.add("任玉文");
		
		System.out.println(set);
	}

创建有序的对象:

/**
 * 	学生对象
 */
 //实现Comparable接口
public class Student implements Comparable<Student> {
	
	private String name;
	private int age;
	private char sex;
	
	public Student() {
		super();
	}
	public Student(String name, int age, char sex) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	
	//重写comparaTo方法,如果不重写,会报ClassCastException异常
	@Override
	public int compareTo(Student student) {
		
		if (this.sex != student.sex) {
			return this.sex == '女' ? -1 : 1;
		} else {
			return student.age - this.age;
		}
		
	}
	
}

由于业务场景设定我们需要创建不同的排序规则,所以使用容器实现更加合理

实现容器有序:

/**
 * 	教师类比较器
 */
 //实现Comparator接口
public class TeacherComparator implements Comparator<Teacher> {

//重写比较方法
	@Override
	public int compare(Teacher t1, Teacher t2) {
		return t2.getAge() - t1.getAge();
	}

}
@Test
	public void test3() {
		//创建比较器对象
		TeacherComparator tc = new TeacherComparator();
		//将比较器对象放入TreeSet对象的构造方法中
		TreeSet<Teacher> set = new TreeSet<>(tc);
		
		set.add(new Teacher("郭老师", 20, '女'));
		set.add(new Teacher("吴老师", 40, '男'));
		set.add(new Teacher("方老师", 16, '男'));
		
		System.out.println(set);
		
	}

由于Comparator接口是函数式的接口,所以可以用函数式的编程,不用额外创建一个比较器的类了

//函数式的编程
TreeSet<Girlfriend> set = new TreeSet<>((g1, g2) -> {
	if (g1.getFaceValue() != g2.getFaceValue()) {
		return g2.getFaceValue() - g1.getFaceValue();
	} else if (g1.getAge() != g2.getAge()) {
		return g1.getAge() - g2.getAge();
	} else {
		return 1;
	}
});
ISO 21434汽车网络安全标准深度解读系列(十):标准实施总结与展望 ISO21434标准深度解读系列总结篇系统回顾了汽车网络安全标准的核心内容与实施要点。文章梳理了10篇系列文章的结构体系,提炼出标准的三大核心价值:系统性方法(全生命周期覆盖、多层次管理)、风险导向理念(威胁驱动、动态管理)和供应链协同机制。总结了实施经验中的关键要素,包括高层承诺、专业团队建设,并提出了分阶段实施路径建议。同时分析了当前面临的技术挑战(系统复杂性、新兴技术)和管理挑战(文化转变、资源投入)。最后展望了AI应用、零信任架构等技术发展趋势,以及标准未来的演进方向,为企业实施提供战略与执行层面的 阅读详情

相关推荐

Latex小白也能搞定!5分钟教你用Overleaf打造个性化简历(附免费模板)

本文为LaTeX新手提供了一份快速上手指南,教你如何在5分钟内使用Overleaf在线平台和现成模板,轻松打造专业且个性化的简历。文章详细介绍了从选择模板、替换个人信息到进行颜色、图标等个性化调整的完整流程,让你无需深入学习LaTeX语法,即可高效制作出排版精美、脱颖而出的求职简历。

2a4s6d8f0g的博客 682

Java集合Set用法总结

本文转自:https://www.jianshu.com/p/b48c47a42916 Set继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类。在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。 HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置; TreeSet是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进

别说话写代码的博客 6080

《寻秦OL》.ani动画逆向解析:二进制结构与Unity重实现

动画文件格式是游戏资源逆向的核心入口,其本质是一组按特定规则组织的二进制数据流。理解魔数识别、字节序、字段对齐与差分编码等底层原理,是解析非标准格式的关键前提。技术价值在于绕过黑盒协议,直接从静态客户端提取可验证的原始语义;典型应用场景包括老游戏复刻、美术资产抢救、引擎跨平台迁移及教学级逆向训练。本文以《寻秦OL》的`.ani`文件为实例,深入剖析其C风格结构布局、GB2312中文命名、16位定点数旋转表示及帧主序差分存储机制,并基于C#在Unity中完成从字节流到AnimationClip的端到端重建,覆

weixin_30368981的博客 640

java高级特性——集合之Set接口及实现类

四.Set接口 Set接口是Collection接口另外一个常用子接口,Set接口描述的是一种简单的集合,集合中的对象并不按特定的方式排序,并且不能保存重复的对象,也就是说Set接口可以存储一组唯一的无序的对象,set中存放的是对象的引用,采用对象的equals()方法比较两个对象是否相等,set接口常用的实现类有HashSet 4.1使用HashSet类动态存储数据 HashSet集合底层是哈希表结构,查询速度快,是无序集合,没有索引,允许存储null,线程不安全但运行速度快,底层数据结构是哈希表,

kkkyzp的博客 673

微动探测原理及仪器介绍

微动探测原理及仪器介绍 1、微动探测原理 1.1 基本理论 微动是由体波和面波组成,其中微动能量的百分之七十以上都来自于面波,并且它与体波的主要区别是在不均匀的介质中传播时面波会发生频散,而体波不存在频散现象,因此面波是微动探测的主要对象。 对于介质的弹性参数(如横波速度、层薄厚、压缩波速度、密度等),面波传播速度相对比较敏感,特别是对横波的敏感性很高,因此可以利用面波来反演横波速度。 在时间和空间上,微动信号具有以下特性:高度变化、无规律性、无重复性等,有研究发现全世界各处记录的微动信号都有相似

zw461450141的博客 1万+

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1782

Java Set集合详解

一:set集合框架体系图 二:set集合介绍 Set接口继承了Collection接口,含有许多常用的方法。 int size();返回集合的长度 boolean isEmpty();判断集合是否为空 boolean contains(Object o);是否包含某个值 boolean add(E e);添加元素 boolean remove(Object o);删除元素 Set接口的存储特点是无序不可重复,可以存放唯一一个null值,Set的常用实现类有HashSet,TreeSet。 Set集合的

qq_51751452的博客 2万+

Grafana 可视化配置

Grafana 可视化操作使用

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 1940

java学习之高级语法(十一)----- Set 集合

Set 集合 ▶ java.util.Set 接口 extends Collection 接口 Set 接口的特点: (1)不允许存储重复的元素 (2)没有索引,没有带索引的方法,也不能使用普通的for循环遍历 ▶ java.util.HashSet集合implements Set 接口 HashSet 接口的特点: (1)不允许存储重复的元素 (2)没有索引,没有带索引的方法,也不能使用普通的for循环遍历 (3)是一个无序集合,存储元素和取出元素的顺序可能不一致 (...

Learning_xzj的博客 518

Cadence OrCAD Capture软件启动过程卡死且无法恢复的解决方法

如下图所示Cadence OrCAD Capture软件在启动后出现卡死的现象,且等待后无法自动恢复,需要强行关闭,再次启动依然卡死。

fydar的博客 4042

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

WW、forever的博客 484

Java高级编程九:集合类 List Set Map及其子类用法

第九章 java集合 #mermaid-svg-BUrmrLQZjlsdD5Bd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BUrmrLQZjlsdD5Bd .error-icon{fill:#552222;}#mermaid-svg-BUrmrLQZjlsdD5Bd .error-text{fill:#552222;stroke:#552222;}#mermaid-

qq_42059717的博客 437

搭建一个简单的 Django + Vue 项目

在本文中,我将为您详细介绍如何搭建一个简单的 Django + Vue 项目。Django 是一个使用 Python 编写的高级 Web 框架,而 Vue 是一个流行的 JavaScript 框架,用于构建用户界面。通过结合 Django 和 Vue,我们可以创建强大的全栈 Web 应用程序。创建 Django 项目设置 Django 后端创建 Vue 前端连接 Django 和 Vue让我们开始吧!

JfpBlockchain的博客 350

Java 集合总计

1.集合特点:存储对象,长度可变,可存储不同对象。 2.集合框架:集合的总体结构。 3.为什么出现这么多容器?因为每个容器对数据的存储方式都有不同。这个存储方式称之为:数据结构。 4.Add方法的参数类型是Object。以便于接收任意对象。 5.集合中存储的都是对象的引用(地址)。  引用在哪? 6.打印集合的引用时,结果为[对象1.toString, 对象2.toString ……]

tianlin512的专栏 427

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java基础(五) 集合

数组与集合 在java语言中,数组可以存储基本类型数据和引用类型数据。既然如此,仅使用数组就可以存储任何类型数据,为什么还要特意弄出集合的概念来呢?来看这样一个例子: public class Student { private String name; private Integer age; public Student() { super(); } publ...

戏流年的博客 347

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

黑马程序员——Jave集合

------- android培训、java培训、期待与您交流! ---------- 集合体系: Collection: A:List ArrayList Vector LinkedList B:Set HashSet LinkedHashSet TreeSet Map: HashMap Hashtable TreeMap 1.Collection (1)

shuaishuai2015的专栏 357

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

常用的集合

Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。所有Collection都支持iterator方法。即: 1 I...

weixin_30338497的博客 86

2013/12/22 星期日: 第四讲

2013/12/22 星期日: 第四讲 1.包装类:   int num1=5;   integer num=new Integer(num1);   int num2=num.intValue();  |           |                    |        ----------------------       int num1=3;   int

疯狂学linux 458

StJavaDay05

Day05

qq_43380119的博客 980

Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

1.Object类的常用方法2.日期时间类3.System类4.StringBuilder类5.包装类6.Collection集合7.Iterator迭代器8.泛型9.list集合10.List的子类11.Set接口12.Collections常用功能13.Map14.异常15.多线程16.线程安全16.2.2 同步方法17.线程的状态18.等待唤醒机制19.线程池20.Lambda表达式21.File类22.递归23.IO概述24.字节流25.字符流26.IO异常的处理27.属性集28.缓冲流转换流

yabayaoya的博客 1108

Scala进阶之路-高级数据类型之集合的使用

            Scala进阶之路-高级数据类型之集合的使用                                作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。   Scala 的集合有三大类:序列 Seq、集 Set、映射 Map,所有的集合都扩展自 Iterable 特质在 Scala 中集合有可变(“scala.collection.mu...

weixin_34274029的博客 112

【Java】Java 基础系统学习笔记

全篇包含大量可执行代码示例,适合作为Java入门学习的系统参考资料。本文系统整理了Java基础核心知识点,涵盖语法基础、流程控制、数组、方法、面向对象和字符串处理等关键内容。主要内容包括: 语法基础:HelloWorld程序、命名规范(小驼峰/大驼峰)、标识符规则、8种基本数据类型及其转换规则。 流程控制:if-else语句(含最佳实践)、switch语句(支持类型及新特性)、三种循环结构及break/continue用法。 数组操作:数组定义与遍历、System.arraycopy

weixin_44288277的博客 241

Java基础知识总结(绝对经典)

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取![外链图片转存中…(img-XR6asta1-1713134965012)]

2401_84046912的博客 758

Redis 使用手册

数据库,如何学习redis,redis入门,redis实战,一天入门redis

越看越喜欢啊 2221

C#学习记录——入门到进阶

输入输出 //输出语句:换行输出 Console.WriteLine("hool,word"); Console.WriteLine("hool c#"); //输出语句,无换行输出 Console.Write("hool word"); Console.Write("hool c#"); //

i_like_python3的博客 2946

[JavaSE] 学习路线 4周时间规划

文章目录知识点:练习题 知识点: 2019-6-21 [JavaSE] 背景.特点.安装.DOS.环境变量.工作原理.进制转换 2019-6-22 [JavaSE] 注释.变量.数据类型.整数.浮点数.字符.布尔.类型转化.运算符 2019-6-24 [JavaSE] 算术运算符 关系运算符 逻辑赋值运算符 条件运算符 位运算符 运算符优先级 控制台输入 流程控制语句 分支结构 2019-6-25...

景子墨的博客 1895
上一篇: 【Java高级特性】java学习之旅21-List集合
下一篇: 【Java高级特性】java学习之旅23-Map
JeffHan^_^
博客等级 码龄7年 1万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值