集合框架(一)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,一经查实,立即删除!

相关文章

[Mac软件]VMware Fusion Pro for Mac 13.5.1 Build 23298085 VM虚拟机中文版

黑果魏叔网站VMware Fusion Pro – 无需重启即可在 Mac 上运行 Windows、Linux 和其他系统的虚拟化软件。最新版本完全支持 Windows 10、macOS Mojave 和最新的 Mac&#xff0c;包括 18 核 iMac Pro 和配备 6 核 Intel i9 CPU 的 MacBook Pro。VMware Fusion 支持 DirectX 10.1…

Mybatis 如何引用其他文件中的sql 片段

假设: 有一些通用的sql,在整个项目中都有可能使用的到, 但是我不太想定义java接口,结合着java逻辑来实现功能, 又或者,在每一处的mapper.xml内都定义sql片段, 那么如果需要调整sql,我就需要调整好多处相同的代码. 如何后期维护方便,使用起来又简单呢? 想法: 单独创建一个mapp…

RocketMQ学习笔记二

课程来源&#xff1a;马士兵教育官网 - IT职业领路人 马士兵初级版&#xff08;4.5h&#xff09; 本课程讲解的是RocketMQ4.8版本。 消息中间件的使用场景&#xff1f; 异步与解耦&#xff1b;流量削峰&#xff1b;数据分发。 RocketMQ的角色 RocketMQ的基本概念 RocketMQ…

微服务篇-B 深入理解SOA框架(Dubbo)_I 服务注册和发现(学习总结)

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;转载请注明原作者&#xff0c;严禁复制转载 Part 1 理论部分 1 什么是Dubbo? Dubbo是一个面向服务设计的SOA框架&#xff0c;提供了高性能、透明化的RPC远程服务调用的能力、出色的S…

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…

[leetcode] 946. 验证栈序列

题目描述 给定 pushed 和 popped 两个序列&#xff0c;每个序列中的 值都不重复&#xff0c;只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时&#xff0c;返回 true&#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入 pushed […

力扣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电站锅…

leetcode-hot100-普通数组

53. 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; **输入&#xff1a;nums [-2,1,-3,4,-1,2,1,…

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…

2024年科技前瞻:AI辅助研发引领未来创新浪潮

2024 年 AI 辅助研发趋势随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI正逐渐渗透到研发的各个环节&#xff0c;变革着传统的研发模式。在这一背景下&am…