集合框架(一)Set系列集合

Set<E>是一个接口

特点

无序:添加数据的顺序和获取出的数据顺序不一致;不重复,无索引

d90629c7da48403fa6679a9a2c48b29f.png

da162abe16414a1ab6534cf7460f7d60.png

 注意:Set要用到的常用方法,基本上就是collection提供的!自己几乎没有额外新增一些常用功能!

HashSet集合的底层原理

前置知识:哈希值:就是一个int类型的数值,Java中每个对象都有一个哈希值。

49255dce19604b4a8b653925c6689b95.png

 HashSet集合的底层原理:基于哈希表(是一种增删改查数据,性能都较好的数据结构)实现。

哈希表

  • JDK8之前,哈希表=数组+链表
  • JDK8开始,哈希表=数组+链表+红黑树

 f6f8b361b46e49429196741bd1d485a4.png

问题:

1. 如果数组快占满了,会出什么问题?该咋办?     链表会过长,导致查询性能降低。

(哈希表有一种机制:扩容。就是把底层的数组长度扩大,再把元素放到新数组里面去,把他分散开来,这样就会使链表上的数据要少一些,性能就得到一定的优化。)一旦数组占满了16*0.75=12个位置了,他就会扩容,并不会等到把数组中所有的位置都占完。

扩容的话会扩容成原数组的两倍的样子,再把原数组中的数据重新转移到新数组中,这样就可以把链上的数据变得少一些都分散开来,这样他的查询性能也就得到优化了。

 

JDK8开始,当链表长度超过8,且数组长度>=64时,自动将链表转为红黑树。

9f0f4ded78714fb9bf2d0311da74c530.png

96ed5bd728b1418f907466f64064c670.png

f6c9db608467463aba7487627e2507df.png

a33599e7f8f94ef49e6867327b7106df.png

如果要认为两个不同对象是重复的,就必须要重写这个对象的hashCode()方法和equal()方法。这样HashSet<>集合就会认为内容一样的两个对象是重复的,就会帮我们去掉一个重复的。

LinkedHashSet集合的底层原理

依旧是基于哈希表(数组、链表、红黑树)实现的。

但是,他的每个元素都额外多了一个双链表的机制记录他前后元素的位置。

67d9be001a2f4e0da9c910a6d288004f.png

5fa1d3a86ba5406d913a70b9c9bb11c4.png

TreeSet集合

特点:不重复、无索引、可排序(默认升序排序,按照元素的大小,由小到大排序)

底层是基于红黑树实现的排序。

注意:
对于数值类型:Integer,Double,默认按照数值本身的大小进行升序排序

对于字符串类型:默认按照首字符的编号升序排序。
对于自定义类型如Student对象,Treeset默认是无法直接排序的

ed5206403dc1493e9f58ec7592fc7299.png

f32e63988b3a423da8f9cab61693e728.png2eb3af9cdc1245c5b76177463db32fae.png这个代码可以简化,函数式接口的匿名内部类形式可以简化。

c22575da64a0467da1e6ea41f26237e9.png

两种方式中,关于返回值的规则:
如果认为第一个元素 >第二个元素 返回正整数即可。
如果认为第一个元素<第二个元素 返回负整数即可。
如果认为第一个元素=第二个元素 返回0即可,此时Treeset集合只会保留一个元素,认为两者重复。
注意:如果类本身有实现Comparable接口,Treest集合同时也自带比较器,默认使用集合自带的比较器排序。

Collection集合的使用总结

5fe85ae44ad34f09b243d72de8a875f0.png

efd108582d054cb28b1f293061991d1c.png集合的并发修改异常问题

集合的并发修改异常
使用迭代器遍历集合时,又同时在删除集合中的数据,程序就会出现并发修改异常的错误。

04cb4658acda498a83e6edb973369b3a.pngfor循环

49fbd2a56fe848c1a309d2cea01e110a.png迭代器

6c106d4651c8441e850d80e40f31c68e.png增强for循环

f2606757792f463e9dde0839afef9d61.pngLambda表达式

(Lamdba表达式底层原理就是增强for循环)

f899278c7dec4fa3940801ff2d8b79fc.png

 

 

 

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

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

相关文章

denied: requested access to the resource is denied报错解决

Docker 镜像在文件中包含一组指令&#xff0c;可在 Docker 容器中执行代码。大多数情况下&#xff0c;在创建 docker 镜像之后&#xff0c;当尝试将镜像推送到远程仓库时&#xff0c;会发生这种类型的报错“Docker denied: requested access to the resource is denied” 由于错…

RabbitMQ - 07 - 通过注解创建队列和交换机

之前消息模型的实现,都是通过rabbitMQ Management 控制台来手动创建 queue 和 exchange 的 在项目开发中有两种方式通过代码声明 创建 一种是通过 Bean 方式,这种代码量较大 稍繁琐 一种是通过注解的方式声明 先编写消费者代码 通过注解绑定了 消息队列,交换机,还有 routin…

零售EDI:劳氏 Lowe‘s EDI项目案例

通过 EDI&#xff0c;企业与Lowes之间可以直接交换各种商业文档&#xff0c;如订单、发票、收据等&#xff0c;从而实现信息的实时交换&#xff0c;提高了供应链的效率和准确性。在现代供应链管理中&#xff0c;EDI 已经成为了不可或缺的重要工具。 作为一家拥有多条业务线的企…

SpringCloudFeign远程调用

文章目录 1. Feign 是什么2. Feign 的使用2.1 引入依赖2.2 写接口2.3 服务调用方2.4 启动测试 3. Feign 日志配置4. Feign 使用优化5. 注意包扫描问题6. 注意的问题6.1 参数问题6.2 Feign 自动装配 1. Feign 是什么 Feign 是一个声明式、模板化的 HTTP 客户端&#xff0c;它是…

Intel® Extension for PyTorch*详细安装教程

最近在研究Intel的pytorch的加速拓展Intel Extension for PyTorch*,但是发现官网的文档全是英文的&#xff0c;不太好找安装教程。所以特此分享Intel Extension for PyTorch*的详细安装教程。 文章目录 一、安装所需系统要求1.1 硬件需求1.2 软件需求 二、准备2.1 安装驱动程序…

Linux 进程程序替换

&#x1f493;博主CSDN主页:麻辣韭菜-CSDN博客&#x1f493;   ⏩专栏分类&#xff1a;http://t.csdnimg.cn/G90eI⏪   &#x1f69a;代码仓库:Linux: Linux日常代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d;&#x1f5…

力扣530. 二叉搜索树的最小绝对差

思路1&#xff1a;中序遍历&#xff0c;递归排序成有序数组&#xff1b;因为是有序&#xff0c;只需要求相邻两个值的最小差值。 class Solution {ArrayList <Integer> list new ArrayList();int ans 100001;//题目最大 100000public int getMinimumDifference(TreeNo…

动态规划|【路径问题】|174.地下城游戏

题目 174. 地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健…

前端加密面面观:常见场景与方法解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

FIT介绍-0

1、背景 FIT是flattened image tree的简称&#xff0c;它采用了device tree source file&#xff08;DTS&#xff09;的语法&#xff0c;生成的image文件也和dtb文件类似&#xff08;称做itb&#xff09;。 结构如下图&#xff1a; 其中image source file(.its)和device tree …

2024年【G2电站锅炉司炉】最新解析及G2电站锅炉司炉复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉最新解析是安全生产模拟考试一点通总题库中生成的一套G2电站锅炉司炉复审模拟考试&#xff0c;安全生产模拟考试一点通上G2电站锅炉司炉作业手机同步练习。2024年【G2电站锅炉司炉】最新解析及G2电站锅…

IOS覆盖率报告info文件解读

一&#xff0c;IOS覆盖率报告的生成 在做前端精准测试的时候&#xff0c;对于iOS端&#xff0c;通常会做如下操作&#xff1a; &#xff08;1&#xff09;合并覆盖率数据 如下操作&#xff1a; xcrun llvm-profdata merge coverage_file1657885040728.profraw coverage_fil…

LeetCode刷题日志-17.电话号码的字母组合

纯暴力解法&#xff0c;digits有多长&#xff0c;就循环多少次进行字母组合 class Solution {public List<String> letterCombinations(String digits) {List<String> reslut new ArrayList<>();if(digits.equals(""))return reslut;Map<Inte…

视图【MySQL】

文章目录 概念操作视图创建视图查询视图更新视图删除视图 视图规则和限制 概念 MySQL 中的视图&#xff08;View&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。视图本身不包含数据&#xff0c;这些数据是从一个或多个实际表中派生出来的&#xff0c;通过执行视图定义…

LLM RAG系统中消除数据幻觉的几个绝招-OPENAI公司内称的“大招”

前言-什么是数据幻觉&#xff1f;它到底有什么危害呢 我们直接来举例&#xff1a; 我是金银花一区的&#xff0c;附近有什么小学&#xff1f; 此时RAG带出如下信息&#xff1a; 金银花小区一区、二区、三区附近教育资源有&#xff1a;银树大学、建设小学金银花校区、金树高…

使用Python模拟绘制自由落体运动过程中的抛物线

目录 一、引言 二、自由落体运动的基本原理 三、使用Python模拟自由落体运动 四、扩展功能&#xff1a;添加速度曲线和动画效果 五、总结与展望 一、引言 自由落体运动是物理学中最基础的运动形式之一&#xff0c;它描述了一个物体在仅受重力作用下的运动轨迹。在这个…

Django工具

一、分页器介绍 1.1、介绍 分页,就是当我们在页面中显示一些信息列表,内容过多,一个页面显示不完,需要分成多个页面进行显示时,使用的技术就是分页技术 在django项目中,一般是使用3种分页的技术: 自定义分页功能,所有的分页功能都是自己实现django的插件 django-pagin…

springboot260火锅店管理系统

火锅店管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装火锅店管理系统软件来发挥其高效…

方法的使用

1.什么是方法(method) 在java中方法就是一个代码片段.。几乎相当于c语言的函数。 2.方法定义 方法跟函数是几乎一样的。所以语法是大差不差的。就多了一点东西。之前我们在c语言里已经很详细讲过了函数。这里就简便的讲一下。 相比c语言函数多了个修饰符 。 现在看下其注意…

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型

【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法&#xff0c;常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则&#xff0c;从历史样本中集中找出与现在的最相似的一…