集合框架(一)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

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GPU 和并行计算

还是那句话&#xff0c;互联网领域遇到的大多数问题&#xff0c;在现实世界早就有了解法&#xff0c;今天再分享一个。 视频来自安阳市最后的朋克&#xff0c;张教练的实拍&#xff0c;视频中展示的是血糕&#xff0c;安阳市特产&#xff0c;不了解的可以将其等同于 “一种必须…

【JavaScript】JavaScript 变量 ① ( JavaScript 变量概念 | 变量声明 | 变量类型 | 变量初始化 | ES6 简介 )

文章目录 一、JavaScript 变量1、变量概念2、变量声明3、ES6 简介4、变量类型5、变量初始化 二、JavaScript 变量示例1、代码示例2、展示效果 一、JavaScript 变量 1、变量概念 JavaScript 变量 是用于 存储数据 的 容器 , 通过 变量名称 , 可以 获取 / 修改 变量 中的数据 ; …

Util工具类功能设计与类设计(http模块一)

目录 类功能 类定义 类实现 编译测试 Split分割字符串测试 ReadFile读取测试 WriteFile写入测试 UrlEncode编码测试 UrlDecode编码测试 StatuDesc状态码信息获取测试 ExtMime后缀名获取文件mime测试 IsDirectory&IsRegular测试 VaildPath请求路径有效性判断测…

Day33-计算机基础3

Day33-计算机基础3 1.根据TCP/IP进行Linux内核参数优化1.1 例1&#xff1a;调整访问服务端的【客户端】的动态端口范围 &#xff0c;LVS&#xff08;10-50万并发&#xff09;&#xff0c;NGINX负载&#xff0c;SQUID缓存服务,1.2 企业案例&#xff1a;DOS攻击的案例&#xff1a…

工资低适合下班做的6大副业,每一个都值得尝试!

2024年是最适合发展个人副业的时候&#xff01;无论你是否有全职工作&#xff0c;如果你的主业还不能满足你的成就感&#xff0c;还不能满足你的生活需求&#xff0c;这6个下班可以做的副业都很值得尝试&#xff01; 千金宝库做简单的网络任务 近年来&#xff0c;随着互联网技…

算法详解——leetcode150(逆波兰表达式)

欢迎来看博主的算法讲解 博主ID&#xff1a;代码小豪 文章目录 逆波兰表达式逆波兰表达式的作用代码将中缀表达式转换成后缀表达式文末代码 逆波兰表达式 先来看看leetcode当中的原题 大多数人初见逆波兰表达式的时候大都一脸懵逼&#xff0c;因为与平时常见的表达式不同&am…

C语言学习笔记,学懂C语言,看这篇就够了!(中)

附上视频链接&#xff1a;X站的C语言教程 目录 第8章、函数8.1 函数是什么8.2 函数的分类8.2.1 库函数8.2.1.1 如何使用库函数 8.2.2 自定义函数 8.3 函数参数8.3.1 实际参数(实参)8.3.2 形式参数(形参) 8.4 函数调用8.4.1 传值调用8.4.2 传址调用8.4.3 练习 8.5 函数的嵌套调…

如何使用ArcGIS Pro进行坡度分析

坡度分析是地理信息系统中一种常见的空间分析方法&#xff0c;用于计算地表或地形的坡度&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro进行坡度分析&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&…

Python爬虫:http和https介绍及请求

HTTP和HTTPS 学习目标&#xff1a; 记忆 http、https的概念和区别记忆 浏览器发送http请求的过程记忆 http请求头的形式记忆 http响应头的形式了解 http响应状态码 1 为什么要复习http和https 在发送请求&#xff0c;获取响应的过程中 就是发送http或https的请求&#xff0c…

自然语言发展历程

一、基础知识 自然语言处理&#xff1a;能够让计算理解人类的语言。 检测计算机是否智能化的方法&#xff1a;图灵测试 自然语言处理相关基础点&#xff1a; 基础点1——词表示问题&#xff1a; 1、词表示&#xff1a;把自然语言中最基本的语言单位——词&#xff0c;将它转…

中国电子学会2021年9月份青少年软件编程Sc ratch图形化等级考试试卷四级真题

【 单选题 】 1.下面哪个选项程序可以交换下图列表中第2项和第3项的位置&#xff1f; A&#xff1a; B&#xff1a; C&#xff1a; D&#xff1a; 2.雷峰塔景区的门票价格政策是&#xff1a;成人40元/人&#xff1b;6周岁&#xff08;含6周岁&#xff09;以下的实行免票&#…

常用MII接口详解

开放式系统互连 (OSI) 模型 七层开放系统互连 (OSI) 模型中&#xff0c;以太网层 位于最底部两层 - 物理层和数据链路层。 从百兆以太网接口开始 首先是百兆以太网规定的两种接口 介质无关接口 (MII) Media Independent Interface 介质相关接口 (MDI) Medium Depen…

manjaro 安装 wps 教程

内核: Linux 6.6.16.2 wps-office版本&#xff1a; 11.10.11719-1 本文仅作为参考使用, 如果以上版本差别较大不建议参考 安装wps主体 yay -S wps-office 安装wps字体 &#xff08;如果下载未成功看下面的方法&#xff09; yay -S ttf-waps-fonts 安装wps中文语言 yay …

如何用YOLOv8实现图像分割

1. 介绍 在之前的文章中,介绍了如何使用 YOLOv8 在不同的编程语言来检测图片中的对象。然而,YOLOv8 还可以把检测到的目标图像分割出来,本篇文章将介绍如何使用YOLOv8做图片分割。 对象检测的结果是所有检测到的对象的边界框。图像分割的结果是所有检测到的对象的蒙版。它是…

一篇文章简单介绍YOLO v1到v8的演变

大家好&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;是一种流行的目标检测库&#xff0c;它的第一个版本在2015年发布。YOLO工作速度很快&#xff0c;提供了良好的结果&#xff0c;而且预训练模型是公开可用的。该模型迅速变得流行&#xff0c;该项目至今仍在积…

ai学习前瞻-python环境搭建

python环境搭建 Python环境搭建1. python的安装环境2. MiniConda安装3. pycharm安装4. Jupyter 工具安装5. conda搭建虚拟环境6. 安装python模块pip安装conda安装 7. 关联虚拟环境运行项目 Python环境搭建 1. python的安装环境 ​ python环境安装有4中方式。 从上图可以了解…

python之数组,链表,栈,队列

1.数组 优点&#xff1a; 索引操作速度快&#xff1a;通过索引可以直接访问元素&#xff0c;因此索引操作的时间复杂度是 $O(1)$&#xff0c;即常数级 缺点&#xff1a; 插入、删除元素慢&#xff1a; 如果需要在中间或开始位置插入或删除元素&#xff0c;可能需要移动大量…

漫漫数学之旅036

文章目录 经典格言数学习题古今评注名人小传 - 爱因斯坦 经典格言 纯数学在其领域内是逻辑思想的诗歌。——阿尔伯特爱因斯坦 “纯数学在其领域内是逻辑思想的诗歌”这句话体现了爱因斯坦对数学的深刻理解和热爱。在这句话中&#xff0c;爱因斯坦将纯数学比作诗歌&#xff0c;…

mmdetection如何计算准确率、召回率、F1值

1、训练 python tools/train.py configs/fcos/fcosrdweed3.py 2、测试 这一步要加–outresult.pkl&#xff0c;才能计算准确率和召回率 python tools/test.py configs/fcos/fcosrddweed3.py work_dirs/fcosrddweed3/epoch_300.pth --outresultfcos.pkl3、计算准确率和召回率…

三维GIS的业务导向

的确&#xff0c;目前三维GIS以做特效居多&#xff0c;酷炫、亮眼&#xff0c;从二维转到三维&#xff0c;第一眼就给人眼前一亮的感觉&#xff0c;就凭这一项&#xff0c;很多客户就会买单&#xff0c;GIS的客户以政府、科研院所、特种行业为主&#xff0c;买过一次单后&#…