15.Set系列,可变参数、Collections

news2024/11/15 13:02:23

目录

一.Set系列

1.1 Set系列集合特点

1.2 Set集合实现类特点

1.3 HashSet

1.3.1 特点

1.3.2 优点

1.3.3 在理解原理之前要知道的几个概念。

1.3.4 底层原理

1.3.5 哈希表的形成过程/元素的存入过程(Jdk8的版本)

1.3.6 注意事项

1.4 linkedHashSet

1.4.1 特点

1.4.2 优点

1.4.3 linkedHashSet的底层原理

1.5 TreeSet

1.5.1 特点

1.5.2 优点

1.5.3 底层原理

1.5.4 注意事项

二.可变参数

2.1 可变参数概述

2.2 可变参数的格式

2.3 可变参数的作用

三.Collections

3.1 什么是Collections

3.2  Collections的作用

3.3 Collections常用API

3.3.1 常用API

3.3.2 排序API

3.4 为什么Collections只能对List系列的集合进行排序?


一.Set系列

1.1 Set系列集合特点

无序、不可重复、无索引。Set集合的功能基本上与Collection的API一致。

无序:存取顺序不一致。

不可重复:可以去除重复。

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

1.2 Set集合实现类特点

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

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

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

1.3 HashSet

1.3.1 特点

无序、不重复、无索引

1.3.2 优点

因为底层是哈希表,所以元素的增删改查性能都非常好。

1.3.3 在理解原理之前要知道的几个概念。

哈希值:是JDK根据对象的地址,按照某种规则算出来的int类型的数值。

Object的API:public int hashcode()方法用来返回对象的哈希值。

对象的哈希值特点:

1. 同一个对象多次调用hashcode方法返回的哈希值是相同的。

2. 默认情况下,不同对象的哈希值是不同的。

1.3.4 底层原理

HashSet的底层原理是哈希表。在JDK7之前哈希表=数组+链表,Jdk8之后哈希表=数组+链表+红黑树。

1.3.5 哈希表的形成过程/元素的存入过程(Jdk8的版本)

1. 创建一个默认长度为16的数组,数组名为table。

2. 把要存入的元素的地址计算成哈希值,再让哈希值对数组长度取余,将取余结果存入数组的相应位置。

3. 判断数组的当前位置是否为null,如果是null直接存入,如果位置不为null,代表这个位置有一个或多个元素,再调用equals方法比较其元素值,如果要存入的元素与这个位置的某一个元素重复,则不存,如果都不重复,则存入。存入后,如果这个位置的链表长度>8,则自动转换为红黑树,当链表长度小于6的时候自动转回链表。

4. 当数组存满到 16*0.75=12时,数组就自动扩容到原来的二倍,再把原来数组的元素复制到新数组。

1.3.6 注意事项

如果希望HashSet认为二个内容一样的对象是重复的,则需要让对象重写Object的equals和hashcode方法。

1.4 linkedHashSet

1.4.1 特点

有序、不重复、无索引

1.4.2 优点

因为底层也是哈希表,所以元素的增删改查性能都非常好。。

1.4.3 linkedHashSet的底层原理

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

1.5 TreeSet

1.5.1 特点

排序、不重复、无索引

1.5.2 优点

底层是红黑树,所以所以元素的增删改查性能都非常好。

1.5.3 底层原理

TreeSet的底层是红黑树。

1.5.4 注意事项

TreeSet集合是一定要排序的

1. 具有值特性的默认升序排序。

2. 对于字符串类型:默认按照首字符的编号升序排序。

3. 自定义类型要指定排序规则,有二种方法:

第一种:让自定义的类实现comparable接口,并重写接口里面的comparaTo方法定制比较规则。

第二种:在创建TreeSet集合对象时在构造器中通过匿名内部类创建一个比较器对象进行排序。

如果TreeSet集合存储的对象有实现比较规则,集合也自带比较器,默认使用集合自带的比较器排序。

二.可变参数

2.1 可变参数概述

可变参数用在形参中可以接收多个数据。

2.2 可变参数的格式

数据类型...参数名称

2.3 可变参数的作用

1. 接收参数非常灵活,方便。可以不接收参数,可以接收1个或多个参数,也可以接收一个数组。

2. 可变参数在方法内部实际上是一个数组。

三.Collections

3.1 什么是Collections

Collections不属于集合体系,Collections是集合工具类。

3.2  Collections的作用

是用来操作集合的工具类。

3.3 Collections常用API

3.3.1 常用API

3.3.2 排序API

只能对LIst集合进行排序

3.4 为什么Collections只能对List系列的集合进行排序?

因为HashSet和LinkedHashSet的底层是哈希表,每一个元素的位置都是根据哈希值被唯一确定下来了,不能够再排序。

TreSet本身就能进行排序,所以不需要Collections的帮助。

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

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

相关文章

通用数字支付网络(UDPN)于达沃斯论坛期间正式发布

2023年1月19日,在瑞士达沃斯举行的世界经济论坛 (WEF) 会议期间,通用数字支付网络 (Universal Digital Payment Network, UDPN)正式对外发布。 近年来,全球各国央行数字货币(CBDC)得到了广泛的关注与长足的进步&#…

WebHooks

webhook 究竟是什么呢? Webhook是一个API概念,webhoo是一种web回调或者http的push API。Webhook作为一个轻量的事件处理应用,正变得越来越有用。 具体的说,webhook 是应用给其它应用提供实时信息的一种方式。信息一产生&#xf…

Js如何实现当网页超过一屏时导航菜单始终置顶-吸顶盒效果

前言我们平时在逛一些电商网站时,无论是首页还是详情页,通常会有一个导航菜单石红跟随着页面,无论是页面滚动到中间还是底部这是为了方便用户查看商品的各类信息或提交订单购物也就是吸顶盒效果,那这个效果是怎么实现的?原生Js如下是原生js// 初始化函数 function init() {// …

[Pytorch] CIFAR-10数据集的训练和模型优化

本篇文章借鉴了我的朋友Jc的报告,他是一个十分优秀的人。 本篇文章记录了第一次完整训练优化的过程 0 关于数据集 在CIFAR-10 dataset的介绍中,cifar-10数据集一共10类图片,每一类有6000张图片,加起来就是60000张图片&#xff0…

深度卷积对抗神经网络 基础 第五部分 Inception-v3 architecture GANs

深度卷积对抗神经网络 基础 第五部分 Inception-v3 architecture GANs 对抗神经网络能够产生不存在的图片,换脸或者生成一些艺术品,这些有趣和强大的对抗神经网络的能力不仅能够创造价值,还能够用来犯罪。With Great Power , Comes With Res…

3.1.1 类和对象

文章目录1.类2.对象3.类和对象的关系4.类的创建使用5.对象在内存中的存储过程6.对象创建过程分析1.类 java最基本的单位就是类,可以理解为类型类是一类事物的抽象可以理解为模板或者设计图纸 注意:类在现实世界并不存在,它只是一种对象的数据类型。例如乌鸦&#…

如何使用DevExpress WPF组件实现异步加载TreeList节点?建议收藏

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。在本文中,我…

PADS Layout封装创建时批量放置焊盘的方法

批量放置焊盘一般是在BGA封装的是用的比较多,当然对于一些普通贴片焊盘也是挺常用的。 1、第一步:打开PCB封装编辑器,进入到封装编辑界面,放置焊盘后,点击焊盘右键“分步与重复”既可。2、第二步:点击以后弹…

常见的锁策略和synchronized的锁机制

文章目录一. 常见的锁策略1. 乐观锁和悲观锁2. 轻量级锁和重量级锁3. 自旋锁和挂起等待锁4. 普通互斥锁和读写锁5. 公平锁和非公平锁6. 可重入锁和不可重入锁二. synchronized的锁机制1. 锁升级/锁膨胀2. 锁消除3. 锁粗化一. 常见的锁策略 1. 乐观锁和悲观锁 乐观锁和悲观锁主…

C++ | 数据结构与算法 | 最小生成树算法讲解 | Kruskal Prim

文章目录前言Kruskal算法Prim算法前言 讲解之前,我们需要先明白连通图是指什么?连通图具有以一个顶点为起点可以到达该图中的任意一个顶点的特性,就算它们不直接相连,但是它们之间至少有一条可以递达的路径。并且连通图是针对无向…

劳务派遣协议范本整理版模板范本

劳务派遣协议范本整理版 甲方(用工单位):______ 法定代表人:____________ 地址:__________________ 电话:__________________ 传真:__________________ 乙方(派遣单位&#xf…

【Java】一文彻底弄懂访问修饰符(public/protected/默认/private)--建议收藏

博主简介:努力学习的预备程序媛一枚~博主主页: 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言 OOP(Object Oriented Programing),即面向对象编程,最重要的功能/特点之一就是封装,这点在该专栏开篇博客【…

WebPack面试题汇总

1,Webpack有什么作用,谈谈你对它的理解 现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScript的复杂度增加和需要一大堆依赖包,还需要解决Scss、Les…

记录--这样封装列表 hooks,一天可以开发 20 个页面

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 这样封装列表 hooks,一天可以开发 20 个页面 前言 在做移动端的需求时,我们经常会开发一些列表页,这些列表页大多数有着相似的功能:分页获取列表、上拉加载、下拉刷…

【Java 面试题合集】ThreadPoolExecutor 线程池面试题

文章目录自定义的线程池的 7 个参数如何合理设置核心线程数 corePoolSize 的大小《JAVA 并发编程实战》中的方案java 开发手册中为什么不允许使用 Executors 默认的实现?一个线程池中的线程异常了,那么线程池会怎么处理这个线程?线程池被创建后里面有线…

OpenCV——总结《图像处理-1》

1.HSV H - 色调(主波长)。S - 饱和度(纯度/颜色的阴影)。V值(强度) hsvcv2.cvtColor(img,cv2.COLOR_BGR2HSV)2.图像阈值 函数介绍: ret, dst cv2.threshold(src, thresh, maxval, type) sr…

嵌入式Linux从入门到精通之第九节:系统编程

系统编程概述 在讲解系统编程之前,先了解几个概念: 操作系统的作用: 操作系统用来管理所有的资源,并将不同的设备和不同的程序关联起来。 什么是Linux系统编程? 在有操作系统的环境下编程,并使用操作系统提供的系统调用及各种库,对系统资源进行访问。 学会了C语言再知…

Grafana9.3.x在windows上的安装及使用

Grafana9.3.x的安装及使用1. Grafana install1.1 Download1.2 Install2. User Guide1.1 Document1.2 Table视图背景色渲染3.Awakening1. Grafana install 1.1 Download 下载地址 Grafana Website: https://grafana.com/. 1.2 Install 直接点击安装就好了 进入conf目录复制一…

python集合语法与应用

python集合语法与应用 文章目录python集合语法与应用一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建2.增加3.删除4.集合运算5.拓展知识一6.拓展知识二总结一、实验目的 掌握集合的用法 二、实验原理 集合中只能包含数字、字符串、元组等不可变的类型的…

规则引擎,实现业务低代码开发的重要工具

规则引擎,是将业务执行抽象化的配置,通过其定义的数据结构、算法和流程来实现应用程序功能的普适化。 规则引擎可以帮助企业提高业务开发效率,提高运营的灵活性,降低运营成本与开发成本,让系统更加智能化灵活化。这里以…