集合、List、Set、Map、Collections、queue、deque

概述

相同类型的数据进行统一管理操作,使用数据结构、链表结构,二叉树
分类:Collection、Map、Iterator

集合框架

在这里插入图片描述

List接口

有序的Collection接口,可以对列表中的每一个元u尿素的插入位置进行精确的控制,用户可以根据元素的整数索引访问元素,并搜索列表中的元素
有序,允许多个null元素
常用类:ArrayList、Vector、LinkedList

ArrayList

实现原理:采用动态对象数组实现,默认构造方法构造了一个空数组
第一次添加元素,扩容为10,之后的扩容算法为原来的数组大小+原理啊数组的一半
不适合插入和删除操作
为了防止数组动态扩充太多,建议给你一个初始容量,
线程不安全,适合在单线程使用

Vector

实现原理采用动态数组实现,默认的初始容量为10动态数组
扩容算法:当增量为0时,原来的两倍,当增量大于0时,扩容为原来的大小+增量
不适合插入和删除操作
对于数组扩充太多的建议使用Vector,有初始容量
线程安全,效率低,多线程下使用

LinkedList

底层实现采用双向链表,高效、无序,插入和删除的特性,性能高,

实际开发中如何选择?

1.安全性?Vector
2.是否频繁插入和操作 LinkedList
3.是否存储后遍历 ArrayList

Set接口

一个不包含重复元素的Collection,set不不包含相同元素,并且最多包含一个null元素、无序
HashSet、TreeSet、LinkedHashSet,底层实现与Map关联

HashSet

实现Set类,由哈希表支持,不保证set的迭代顺序,特别时不保证改顺序恒久不变,运行使用null元素
实现原理:基于哈希表(HashMap)实现
不允许重复元素,可以有一个null元素
不保证恒久不变的顺序
添加元素时,把元素作为hashMap的key,value使用一个固定的object对象
排除重复元素使用的时equlas(),如何判断对象是否重复,hashCode()和equals()进行判断
判断两个元素是否相同,先判断两个对象的hashCode是否相同,(如果相同,不一定是同一个对象,不同一定不是同一个对象),相同在比较equals,相同,才相同。
自定义对象哟啊任务属性值都是相同为同一个对象,有这种需求时,重写对象所在类的HashCode和eqals方法
存储结构:数组+链表,数组的元素以链表的形式存储
要把数据存储到哈希表中,首先是计算HashCode的值,再对数组取余,最终决定数据存储的位置

TreeSet

基于TreeMap的NavigableSet实现,让元素的自然顺序进行排序,或者根据创建set提供的Comparator进行排序,取决于构造方法
有序的,基于TreeMap实现(二叉树结构实现),对象需要比较大小,通过比较器来实现,去除重复数,如果自定义的类没有实现比较器结构,将无法添加到treeSet集合中

LinkedHashSet

哈希表和链表的实现
维护着一个运行于所哟条目的双重链表接列表,链表定义迭代顺序,按照元素插入到set的顺序进行迭代

区别:
要排序:TreeSet
不排序,不用保证顺序hashSet
不排序,要顺序LinkedHashSet

Iterator 接口

package com.ty.collectionPackage;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;public class IteratorDemo {public static void main(String[] args) {List<Cat> list = new ArrayList<>();Cat c1 = new Cat("oo", 2, 1);Cat c2 = new Cat("dd", 3, 2);Cat c3 = new Cat("uu", 4, 3);Cat c4 = new Cat("oo", 2, 4);list.add(c1);list.add(c2);list.add(c3);list.add(c4);foreachIterator(list);System.out.println("==========");IteratorDemo(list);System.out.println("=========");foreachLambda();}private static void foreachIterator(Collection<Cat> cats){for (Cat cat : cats) {System.out.println(cat);}System.out.println("foreach遍历了");}private static void IteratorDemo(Collection<Cat> cats){Iterator<Cat> iterator = cats.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}System.out.println("Iterator 遍历了");}private static void foreachLambda(){List<Cat> list = new ArrayList<>();Cat c1 = new Cat("oo", 2, 1);Cat c2 = new Cat("dd", 3, 2);Cat c3 = new Cat("uu", 4, 3);Cat c4 = new Cat("oo", 2, 4);list.add(c1);list.add(c2);list.add(c3);list.add(c4);list.forEach((Cat cat) ->{System.out.println(cat);});// list.forEach(cat -> System.out.println(cat));}
}

jdk8新特性之Stream

是元素的集合,支持顺序和并行的对原Stream进行汇聚操作
Stream当成高版本的iterator,Iterator用户只能一个一个的遍历严肃并对其操作,而Stream只需要给出需要对其包含元素的操作,这些才做如何对应到每个元素上,由Stream完成

Map接口

将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射一个值
Map:键值对的形式存在
key唯一,value可以重复
具体实现类:hashMap、TreeMap、HashTable、LinkedHashMap

HashMap

基于哈希表的Map接口,提供可选的映射操作,运行使用null值和null键,不保证映射的顺序,特别不保证该顺序恒久不变。

package com.ty.collectionPackage;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class MapDemo {public static void main(String[] args) {HashMapDemo();}private static void HashMapDemo(){Map<Integer,String> map = new HashMap<>();map.put(1,"tt");map.put(2,"yy");map.put(3,"zz");map.put(4,"cc");map.put(5,"pp");System.out.println(map.size());System.out.println("===========");//迭代Set<Map.Entry<Integer, String>> entrySet = map.entrySet();for (Map.Entry e : entrySet) {System.out.print(e.getKey()+"-->"+e.getValue()+" ");}//迭代System.out.println("================");Set<Integer> keySet = map.keySet();for (Integer i : keySet) {String value = map.get(i);System.out.print(i+"-->"+value+" ");}//遍历值System.out.println("=============");Collection<String> values = map.values();for (String value:values){System.out.print(value+" ");}//foreachSystem.out.println("==========");map.forEach((key,value)->{System.out.print(key+"-->"+value +" ");});}
}

1.实现原理:基于哈希表(数组+链表+二叉树(红黑树))
2.默认加载因子0.75,默认数组是16
3.把对象存储到哈希表中,把key对象通过hash()方法计算hash值,然后用hash值对数组取余数(默认是16),来决定该key在数组存储的位置,当有多个值时,以链表的形式存储,在jdk8后,当链表大于8时,链表转为红黑树,为了取值更快,存储的数据量越大,性能的表现越明显
4.扩容原理:当数组的容量大于0.75,扩充算法:当前数组容量 << 1(相当于*2,)扩大1倍,扩充次数过多,会影响性能,重新散列,每次扩充代表哈希表散列(重新计算每个hash值的存储位置),开发中尽量减少扩充次数。
5.线程不安全,适合单线程

Hashtable

实现一个哈希表,映射到相应的值,任何非null对象都可以作为键值对,为了成功在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法。
1.jdk1开始使用
2.基于哈希表实现(数组+链表)
3.默认数组大小11,加载因子0.75
4.扩容方式原数组大小<<1 (*2)+1
5.线程安全,用在多线程

**** HasMap和Hashtable区别???

LinkedHashMap

哈希表和链接列表实现,可预知的迭代顺序,保证顺序。
是HashMap的子类,由于HashMap无法保证顺序,此类使用双重列表保证元素顺序。

jdk8中map的新方法

在这里插入图片描述

Conllections类

大量针对Collection和Map操作,分为四类,都是静态方法
1.排序操作,针对List接口
在这里插入图片描述

队列Queue

是一种特殊的线性表,先进先出的数据结构,只允许在表的前端front进行删除操作,在表的后端进行删除操作,进行插入操作的叫队尾,删除操作的端叫队头,队列中没有元素时,称为空队列
在这里插入图片描述
LinkedList实现了Queue接口
请求队列,雄安锡队列、任务

Deque

一个线性collection,支持在两端插入和移除元素。支持有容量限制的双端对了,支持没有固定限制的双端队列
接口定义在双端对了两端访问元素的方法,提供插入、移除、查询 Stack 堆栈:先进后出

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

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

相关文章

如何在 VM 虚拟机中安装 Windows XP 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 没有安装 VM 虚拟机的参考以下文章进行安装&#xff1a; VM 虚拟机安装教程https://eclecticism.blog.csdn.net/article/details/135713915 二、Windows XP 镜像 点击链接下载镜像 下载链接https://pan.baidu.com/s/1sk5pU8PoTJ1dOxMpGCUfc…

【前端】夯实基础 css/html/js 50个练手项目(持续更新)

文章目录 前言Day 1 expanding-cardsDay 2 progress-stepsDay 7 Split Landing PageDay9 Sound BoardDay10 Dad Jokes 前言 发现一个没有用前端框架的练手项目&#xff0c;很适合我这种纯后端开发夯实基础&#xff0c;内含50个mini project&#xff0c;学习一下&#xff0c;做…

[服务器-数据库]MongoDBv7.0.4不支持ipv6访问

文章目录 MongoDBv7.0.4不支持ipv6访问错误描述问题分析错误原因解决方式 MongoDBv7.0.4不支持ipv6访问 错误描述 报错如下描述 Cannot connect to MongoDB.No suitable servers found: serverSelectionTimeoutMS expired: [failed to resolve 2408]问题分析 首先确定其是…

【Python从入门到进阶】49、当当网Scrapy项目实战(二)

接上篇《48、当当网Scrapy项目实战&#xff08;一&#xff09;》 上一篇我们正式开启了一个Scrapy爬虫项目的实战&#xff0c;对当当网进行剖析和抓取。本篇我们继续编写该当当网的项目&#xff0c;讲解刚刚编写的Spider与item之间的关系&#xff0c;以及如何使用item&#xff…

DIcom调试Planar configuration

最近和CBCT组同事调dicom图像 这边得图像模块老不兼容对方得dicom文件。 vtk兼容&#xff0c;自己写得原生解析不兼容。 给对方调好了格式&#xff0c;下次生成文件还会有错。 简单记录下&#xff0c;日后备查。 今天对方又加了 个字段&#xff1a;Planar configuration 查…

计算机网络-网络互联

文章目录 网络互联网络互联方法LAN-LAN&#xff1a;网桥及其互连原理使用网桥实现LAN-LAN使用交换机扩展局域网使用路由器连接局域网 LAN-WANWAN-WAN路由选择算法非自适应路由选择算法自适应路由选择算法广播路由选择算法&#xff1a;分层路由选择算法 网络互联 网络互联是指利…

【安装记录】解决ssh密码正确,却无法连接到虚拟机

可能是没有允许Root登录 解决办法&#xff1a;修改/etc/ssh/sshd_config文件&#xff0c;将 PermitRootLogin 项打开

AI大模型与小模型之间的“脱胎”与“反哺”(第一篇)

一、AI小模型脱胎于AI大模型&#xff0c;而AI小模型群又可以反哺AI大模型 AI大模型&#xff08;如GPT、BERT等&#xff09;通常拥有大量的参数和训练数据&#xff0c;能够生成或理解复杂的文本内容。这些大模型在训练完成后&#xff0c;可以通过剪枝、微调等方式转化为小模型&…

WordPres Bricks Builder 前台RCE漏洞复现(CVE-2024-25600)

0x01 产品简介 Bricks Builder是一款用于WordPress的开发主题,提供直观的拖放界面,用于设计和构建WordPress网站。它使用户能够轻松创建自定义的网页布局和设计,无需编写或了解复杂的代码。Bricks Builder具有用户友好的界面和强大的功能,使用户可以通过简单的拖放操作添加…

在autodl搭建stable-diffusion-webui+sadTalker

本文介绍在autodl.com搭建gpu服务器&#xff0c;实现stable-diffusion-webuisadTalker功能&#xff0c;图片音频 可生成视频。 autodl租GPU 自己本地部署SD环境会遇到各种问题&#xff0c;网络问题&#xff08;比如huggingface是无法访问&#xff09;&#xff0c;所以最好的方…

qt-C++笔记之事件过滤器

qt-C笔记之事件过滤器 —— 杭州 2024-02-25 code review! 文章目录 qt-C笔记之事件过滤器一.使用事件过滤器和不使用事件过滤器对比1.1.使用事件过滤器1.2.不使用事件过滤器1.3.比较 二.Qt 中事件过滤器存在的意义三.为什么要重写QObject的eventFilter方法&#xff1f;使用QO…

【服务器数据恢复】通过reed-solomon算法恢复raid6数据的案例

服务器数据恢复环境&#xff1a; 一台网站服务器中有一组由6块磁盘组建的RAID6磁盘阵列&#xff0c;操作系统层面运行MySQL数据库和存放一些其他类型文件。 服务器故障&#xff1a; 该服务器在工作过程中&#xff0c;raid6磁盘阵列中有两块磁盘先后离线&#xff0c;不知道是管理…

力扣--动态规划1027.最长等差数列

思路分析&#xff1a; 使用动态规划的思想&#xff0c;定义二维数组dp&#xff0c;其中dp[i][j]表示以nums[i]为结尾&#xff0c;公差为(j-1000)的等差数列长度。为了适应负数的情况&#xff0c;将公差的范围设为[-1000, 1000]&#xff0c;并且加上1000作为数组索引。 初始化r…

2024年环境安全科学、材料工程与制造国际学术会议(ESSMEM2024)

【EI检索】2024年环境安全科学、材料工程与制造国际学术会议&#xff08;ESSMEM2024) 会议简介 我们很高兴邀请您参加将在三亚举行的2024年环境安全科学、材料工程和制造国际学术会议&#xff08;ESSMEM 2024&#xff09;。 ESSMEM2024将汇集世界各国和地区的研究人员&…

HarmonyOS创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中&#xff0c;创建ArkTS卡片&#xff0c;具体操作方式如下。 创建卡片。 根据实际业务场景&#xff0c;选择一个卡片模板。 在选择卡片的开发语言类型&#xff08;Language&#xff09;时&#xff0c;选择ArkTS选项&#xff0c;然后单…

vscode使用restClient实现各种http请求

vscode使用restClient实现各种http请求 一&#xff0c;安装插件 首先&#xff0c;我们要在vscode的扩展中&#xff0c;搜索rest Client&#xff0c;然后安装它&#xff0c;这里我已经安装过了。 安装后&#xff0c;我们就可以使用rest client插件进行http各种操作了。 二&…

项目解决方案:街道社区视频监控接入、汇聚和联网设计方案

目 录 一、客户需求 二、网络拓扑图 三、方案描述 四、系统配置 1、服务器配置 2、带宽配置 五、方案优势 1. 平台可堆叠使用 2. 支持主流接入协议 4. 多种终端显示 5. 客户端功能强大 6. 一机一档 一、客户需求 1&#xff0c;一个街道有十个社…

Orange3数据预处理(列选择组件)数据角色及类型描述

在Orange3的文件组件中&#xff0c;datetime、categorical、numeric以及text代表不同种类的数据类型&#xff0c;具体如下&#xff1a; datetime&#xff1a;代表日期和时间类型的数据。通常用于时间序列分析、生存分析和其他需要考虑时间因素的机器学习任务中。例如&#xff0…

纽约纳斯达克大屏投放受众群体有哪些-大舍传媒

纽约纳斯达克大屏投放受众群体有哪些-大舍传媒 1. 纳斯达克大屏的概述 纳斯达克大屏是全球金融市场中最出名的电子交易平台之一。作为一个重要的金融信息传递渠道&#xff0c;纳斯达克大屏吸引了来自全球的投资者的目光。在这个巨大的投放平台上&#xff0c;大舍传媒希望为客…

【Flink精讲】Flink性能调优:内存调优

内存调优 内存模型 JVM 特定内存 JVM 本身使用的内存&#xff0c;包含 JVM 的 metaspace 和 over-head 1&#xff09; JVM metaspace&#xff1a; JVM 元空间 taskmanager.memory.jvm-metaspace.size&#xff0c;默认 256mb 2&#xff09; JVM over-head 执行开销&#xff1…