set系列集合

set系列集合

  • 无序:存取顺序不一致

  • 不重复:可以去除重复

  • 无索引:没有带索引的方法,所以不能使用普通的for循环,也不能通过索引来获取元素

set集合的实现类

  • HashSet:无序、不重复、无索引

  • LinkedHashSet:有序、不重复、无索引

  • TreeSet:可排序、不重复、无索引

set接口中的方法基本与Collection的API一致。

package MyApi.mySet;import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.function.Consumer;public class a01setDemo01 {public static void main(String[] args) {//1.创建一个set集合对象Set<String> s=new HashSet<>();//2.添加元素boolean b1 = s.add("张三");boolean b2 = s.add("李四");boolean b3= s.add("王五");//3.打印集合// System.out.println(s);//迭代器遍历/*  Iterator<String> it = s.iterator();while(it.hasNext()){String next = it.next();System.out.println(next);}*///增强for遍历/*for (String s1 : s) {System.out.println(s1);}*///Lambda表达式s.forEach( str ->System.out.println(str));}
}

HashSet

HashSet底层原理
  • HashSet集合底层采取哈希表存储数据

  • 哈希表是一种对于增删改查数据性能都较好的结构

哈希表组成
  • Jdk8之前:数组+链表

  • Jdk8:数组+链表+红黑树

哈希值
  • 根据hasHcode方法计算出来的int类型的整数

  • 该方法定义在Oject类中,所有对象都可以调用,默认使用地址值进行计算

  • 一般情况下,会重写hashCode方法,利用内部对象属性值计算哈希值

对象的哈希值特点
  • 如果没有重写hashCode方法,不同对象计算出来的哈希值是不同的

  • 如果已经重写hashCode方法,不同的对象只要属性值相同,计算出来的哈希值就是 一样的

  • 在小部分情况下,不同的属性值或者不同的地址值计算出来的哈希值也有可能一样。(哈希碰撞)

HashSet JDK8以前底层原理、
  • 创建一个默认长度16,默认加载因为0.75的数组,数组名为table

  • 根据元素的哈希值根数组的长度计算出应存入的位置

  • 判断当前位置是否为null,如果是Null直接存入

  • 如果位置不为null,表示有元素,则调用equals方法比价属性值

  • 一样:不存 不一样:存入数组,形成链表

    jdk8以前:新元素存入数组,老元素挂在新元素下面

    JDK8以后:新元素直接挂在老元素下面

    JDK8以后,当链表的长度超过八而且数组长度大于等于64时,自动转换为红黑树

    如果集合中存储的是自定义对象,必须要重写equals和hashCode方法

LinkedHashSet底层原理
  • 有序、不重复、无索引

  • 这里的有序是指保证存储和取出来的元素顺序一致

  • 原理:底层数据结构依然是哈希表,只是每个元素又额外的多了一个双链表的机制记录存储的顺序。

TreeSet

  • 不重复、无索引、可排序

  • 可排序:按照元素的默认规则(从小到大)排序

  • TreeSet集合底层是基于红黑树的数据结构实现排序的,增删改查性能都较好。

package MyApi.mySet;import java.util.Iterator;
import java.util.TreeSet;
import java.util.function.Consumer;public class TreeSetDemo1 {public static void main(String[] args) {TreeSet<Integer>  ts=new TreeSet<>();ts.add(4);ts.add(5);ts.add(1);ts.add(3);ts.add(2);
//打印集合System.out.println(ts);//遍历集合Iterator<Integer> iterator = ts.iterator();
while(iterator.hasNext()){Integer next = iterator.next();System.out.println(next);}System.out.println("------");for (Integer t : ts) {System.out.println(t);}System.out.println("------");ts.forEach(integer-> System.out.println(integer));}
}
TreeSet集合默认的规则
  • 对于数值类型:Integer、Double,按照从小到大的顺序进行排序。

  • 对于字符、字符串类型:按照字符在ASCII码表中的数字升序进行排序。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt5开发基础知识【一】

零.前言&#xff1a; 作者写这篇博客的目的主要在于巩固PyQt5的基础知识&#xff0c;例如PyQt5的几个核心模块&#xff0c;分别有什么功能&#xff0c;PyQt5的所有控件的使用方法等。 一.PyQt5的常见模块 1.1QtCore&#xff1a; 该模块包含了非GUI的功能设计。 这个模块被…

python绘制水果价格与利润表图1-3

input输入 &#xff08;默认输入&#xff1a; 苹果&#x1f34e; 橘子&#x1f34a; 梨子&#x1f350; 葡萄&#x1f347;空一行空值表示结束输入input添加 1. 添加 2. 删除 序号和文字都可以&#xff0c;要空格或者空行 可以点对点输入数据深色主题 mpl_style(darkTrue)# 折线…

PyQt5实现远程更新exe可执行文件

PyQt5实现远程下载更新exe可执行文件 1、实现流程 1、获取远程http地址 2、获取需要更新的exe文件 3、点击更新 4、把exe强关闭 5、下载文件 6、更新2、效果图 3、示例代码 conf.ini配置文件: {"http_address_edit_value": "http://xxx.com/xxx/xxx.exe&qu…

【Go】令牌桶限流算法

1. 限流 限流&#xff0c;顾名思义&#xff0c;限制用户请求流量&#xff0c;避免大规模并发导致系统宕机。 2. 令牌桶算法 令牌管理员以恒定的速率向令牌桶里放置一个令牌。如果桶满&#xff0c;就丢弃令牌。 请求到达时&#xff0c;都要先去令牌桶里取一个令牌&#xff0c…

如何进入Windows 11的安全模式?这里提供详细步骤

序言 如果你在启动Windows 11 PC时遇到问题,则重新启动到安全模式可能会有所帮助,该模式会暂时禁用驱动程序和功能,以使你的PC更稳定。下面是如何做到这一点。 在Windows 7和更早版本中,通常可以在打开电脑后按功能键(如F8)启动安全模式。Microsoft从Windows 8中删除了…

C++内存管理篇

文章目录 1. C/C内存分布2. C中的内存管理方式3. operator new和operator delete函数4. new和delete的实现原理5. 定位new表达式(placement-new) 1. C/C内存分布 C语言中&#xff0c;为了方便管理内存空间&#xff0c;将内存分成了不同的区域&#xff0c;每个区域管理不同的数据…

Linux下CAN调试工具can-utils的使用

文章目录 candumpcansendcanbusload can-utils提供了一系列实用的命令行工具,可以方便的调试CAN总线数据。这里主要记录各个工具的用法 candump: 用于查看CAN数据cansend: 用于发送数据到CAN总线canbusload: 用于查看CAN总线使用率 candump 命令行中输入candump然后回车可以…

构建智能IoT系统的步骤

目录 一、需求分析 二、设备选择与部署 三、架构设计 四、边缘节点的配置 五、数据处理与分析 六、安全措施 七、测试与优化 总结 构建一个智能IoT系统需要经过一系列精心规划和执行的步骤&#xff0c;以确保系统的稳定性、可靠性和高效性。下面将详细介绍构建智能IoT系…

【数据分享】2013-2022年全国范围逐月CO栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据和2013-2022年全国范围逐月SO2栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;。 本次我们给大家带来的是2013-2022年全国范围的逐月的CO栅格…

【微信小程序】基本语法

目录 一、列表渲染&#xff08;包括wx:for改变默认&#xff09; 二、事件冒泡和事件捕获 三、生命周期 一、列表渲染&#xff08;包括wx:for改变默认&#xff09; 1、列表渲染(wx-for、block 改变默认wx:for item等) <view> {{msg}} </view> //渲染跟普通vu…

jupyter notebook 调整深色背景与单元格宽度与自动换行

# 安装jupyter主题 pip install jupyterthemes # 列举主题 jt -l # 设置主题 jt -t chesterish设置宽度 打开users 当前用户目录下的custom.css文件 写入.container { width:80% !important; } 即可 设置自动换行 查找创建这个目录以及文件notebook.json 写入配置 “li…

DualSPHysics使用FlowTool工具进行后处理,定义的粒子全在domains外,解决办法

可以知道DualSPHysics官方给了后处理工具使用的示例&#xff0c;如下就是官方给的案例&#xff0c;使用FlowTool工具可以计算出在两个实体domain内的粒子数。 然而我自己也定义了2个domains&#xff0c;但是计算出来Tank1和Tank2里边的粒子数一直是空的&#xff0c;粒子全部在…

保姆级讲解字符串函数(上篇)

目录 字符分类函数 导图 函数介绍 1.getchar 2. isupper 和 islower 字符转换函数&#xff1a;&#xff08;toupper , tolower&#xff09; 与 putchar 字符串函数 导图 string函数的使用和模拟实现 string的使用 求字符串长度 字符串的比较 string函数的模拟实现…

王道机试C++第 4 章 字符串:字符串内容续写几个小程序 Day30

统计字符 习题描述 统计一个给定字符串中指定的字符出现的次数。 输入描述&#xff1a; 测试输入包含若干测试用例&#xff0c;每个测试用例包含2行&#xff0c;第1行为一个长度不超过5的字符串&#xff0c;第2行为一个长度不超过80的字符串。注意这里的字符串包含空格&…

2419. prufer序列(prufer编码,模板题)

活动 - AcWing 本题需要你实现prufer序列与无根树之间的相互转化。 假设本题涉及的无根树共有 n 个节点&#xff0c;编号 1∼n。 为了更加简单明了的描述无根树的结构&#xff0c;我们不妨在输入和输出时将该无根树描述为一个以 n 号节点为根的有根树。 这样就可以设这棵无…

Sora的盈利新视角:从共创经济到产业赋能

随着科技的进步&#xff0c;人工智能和机器学习技术正逐渐成为推动经济增长的新动力。在这样的背景下&#xff0c;Sora作为一款先进的AI视频生成工具&#xff0c;其盈利路径和产业影响也呈现出新的特点。本文将从共创经济和产业赋能的角度&#xff0c;探讨Sora的盈利新路径以及…

kamailio转发电话到目的地,目的返回失败时再转给其他IP

按图中这样测试&#xff1a; A---->kamailio------->B B返回480等失败错误码&#xff08;非200 OK&#xff09;&#xff0c;能进入failure_route[TOVOICEMAIL]&#xff0c;但是t_relay_to_udp执行失败。 好吧&#xff0c;说是&#xff1a;在 failure_route 中处理的是…

苍穹外卖-day01

苍穹外卖-day01 目录 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库环境…

【考研数学】129高分学姐二战经验+资料分享

21年数学三87分 22年数学三129分 可以说这两年该踩的雷我都踩了、该做的题我都做了。 进来看看是什么使我突然醒悟让我数学提分40多分的叭。 李林的880题我也做过&#xff0c;先来说说这本书的优缺点以及适用人群吧。 习题优点 李林老师的880题难度适中&#xff0c;很贴近…

【视频转码】基于ZLMediakit的视频转码技术概述

一、概述 zlmediakit pro版本支持基于ffmpeg的转码能力&#xff0c;在开源版本强大功能的基础上&#xff0c;新增支持如下能力&#xff1a; 1、音视频间任意转码(包括h265/h264/opus/g711/aac等)。2、基于配置文件的转码&#xff0c;支持设置比特率&#xff0c;codec类型等参…