集合、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.mzph.cn/news/698665.shtml

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

相关文章

Qt事件过滤器

1. 事件过滤器 void QObject::installEventFilter(QObject *filterObj) bool eventFilter(QObject *obj, QEvent *event); filterObj表示事件筛选器对象&#xff0c;它接收发送到此QObject对象&#xff08;安装事件过滤器的部件对象&#xff09;的所有事件。筛选器可以停止事件…

SpringCloud-Gateway解决跨域问题

Spring Cloud Gateway是一个基于Spring Framework的微服务网关&#xff0c;用于构建可扩展的分布式系统。在处理跨域问题时&#xff0c;可以通过配置网关来实现跨域资源共享&#xff08;CORS&#xff09;。要解决跨域问题&#xff0c;首先需要在网关的配置文件中添加相关的跨域…

(六)激光线扫描-三维重建

本篇文章是《激光线扫描-三维重建》系列的最后一篇。 1. 基础理论 1.1 光平面 在之前光平面标定的文章中,已经提到过了,是指 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面。 三维空间中平面的公式是: A X + B Y + C Z + D = 0 A X+B Y+C Z+D=0

矿产达人小程序修复前端

应用介绍 本文来自&#xff1a;矿产达人小程序修复前端 - 源码1688 矿产达人小程序&#xff1a; 矿产小游戏小程序是一款以矿产资源为主题的休闲娱乐游戏。以下是该小程序的主要功能特点&#xff1a; 游戏画面精美&#xff1a;小程序采用卡通化的设计风格&#xff0c;画面色…

程序媛的mac修炼手册-- 小白入门Java篇

最近因为要用CiteSpace做文献综述&#xff0c;间接接触Java了。所以&#xff0c;继Python、C之后&#xff0c;又要涉猎Java了。刺激&#xff01;&#xff01; 由于CiteSpace与Java要求版本高度匹配&#xff0c;有个匹配详情明天为大家讲解。总之&#xff0c;我的Java之旅开始于…

我们有在线社区啦!快来加入一起玩儿~

&#x1f64c;大噶好呀&#xff01;春节假期转瞬即逝&#xff0c;小陈已经正式开工啦&#xff5e;虽然不知道大家啥时候收假&#xff0c;但是 RTE 开发者社区㊗️诸位&#xff1a; &#x1f9e7;&#x1f432;&#x1f647;2024 开工大吉&#x1f647;&#x1f432;&#x1f9…

企业级SAS盘SSDPM1643a PM1653 Nytro 2050 KPM71VUG3T20固态硬盘

今天给大家介绍一下KIOXIA铠侠PM7系列均衡性硬盘KPM71VUG3T20 存储容量&#xff1a;3200 GB 接口类型&#xff1a;SAS-4 读取速度&#xff1a;4,200 MB/s 写入速度&#xff1a;3,650 MB/s 工作温度&#xff1a;0 ℃ to 75 ℃ 储存温度&#xff1a;40 ℃ to 85 ℃ MTTF&a…

投放效果难衡量?如何精准提升ROI

在当前的移动互联网环境下&#xff0c;App获客和转化成为了许多应用面临的一大难题。随着广告买量成本的不断攀升&#xff0c;用户增长遭遇了瓶颈。同时&#xff0c;由于移动环境广告标识难以完整获取&#xff0c;投放效果的衡量也变得更加困难。那么&#xff0c;如何打破这一困…

高录用快见刊【最快会后两个月左右见刊】第三届社会科学与人文艺术国际学术会议 (SSHA 2024)

第三届社会科学与人文艺术国际学术会议 (SSHA 2024) 2024 3rd International Conference on Social Sciences and Humanities and Arts *文章投稿均可免费参会 *高录用快见刊【最快会后两个月左右见刊】 重要信息 会议官网&#xff1a;icssha.com 大会时间&#xff1a;202…

Shell变量类型和运算符

一、Shell变量类型 1、变量类型 Shell的3种变量&#xff1a; &#xff08;1&#xff09;局部变量&#xff1a;除了本地变量外&#xff0c;还有shell脚本中定义的变量。 &#xff08;2&#xff09;全局变量&#xff1a;和局部变量相对。比如环境变量就是一种全局变量。 &am…

MaxScale实现mysql8读写分离

MaxScale 实验环境 中间件192.168.150.24MaxScale 22.08.4主服务器192.168.150.21mysql 8.0.30从服务器192.168.150.22mysql 8.0.30从服务器192.168.150.23mysql 8.0.30 读写分离基于主从同步 1.先实现数据库主从同步 基于gtid的主从同步配置 主库配置 # tail -3 /etc/my.…

刷新多个SOTA!最新Mamba魔改版本超越transformer,GPU内存消耗减少74%

因模型规模的扩展和需要处理的序列不断变长&#xff0c;transformer逐渐出现计算量激增、计算效率下降等问题。为克服这些缺陷&#xff0c;研究者们提出了Mamba。 Mamba是一种创新的线性时间序列建模方法&#xff0c;它结合了递归神经网络&#xff08;RNN&#xff09;和卷积神…

[面试] InnoDB中如何解决幻读?

幻读是通过 MVCC 机制来解决的, MVCC 类似于一种乐观锁的机制&#xff0c;通过版本的方式来区分不同的并发事务&#xff0c;避免幻读 问题! 什么是幻读? 事务A前后两次读取同一个范围的数据&#xff0c;在事务A两次读取的过程之间&#xff0c;事务B新增了数据&#xff0c;导致…

星际修仙之剑胆琴心

剧名&#xff1a;《星际修仙之剑胆琴心》 类型&#xff1a;科幻修仙爱情剧 故事大纲&#xff1a; 在遥远的未来&#xff0c;人类文明已经发展到星际时代&#xff0c;科技与修仙相结合&#xff0c;形成了一种全新的文明形态。在这个时代&#xff0c;修仙者不再局限于传统的修炼方…

图文说明Linux云服务器如何更改实例镜像

一、应用场景举例 在学习Linux的vim时&#xff0c;我们难免要对vim进行一些配置&#xff0c;这里我们提供一个vim插件的安装包&#xff1a; curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o./install.sh && bash ./install.sh 但是此安装包…

跳槽前应该做好哪些准备?

第一次求职也好&#xff0c;还是换工作也罢&#xff0c;都需要有严谨的考虑。对于已经工作上班的朋友来说&#xff0c;切不可轻易地辞掉工作&#xff0c;想要跳槽&#xff0c;一定要三思而后行&#xff0c;有一个周密的部署。跳槽有好处&#xff0c;也有弊端&#xff0c;频繁的…

【学网攻】 第(30)节 -- 综合实验三

系列文章目录 目录 系列文章目录 文章目录 前言 一、综合实验 二、实验 1.引入 实验目标 实验设备 实验拓扑图 实验配置 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节…

探讨导致vcruntime140_1.dll无法继续执行代码的原因和解决办法

在使用电脑过程中&#xff0c;我们偶尔会遇到一些令人不悦的错误提示&#xff0c;如"vcruntime140_1.dll丢失"。这个错误提示可能会给我们带来诸多困扰&#xff0c;阻碍我们正常地进行操作。本文将详细探讨导致"vcruntime140_1.dll丢失"错误的原因&#xf…

Java基于SSM+JSP的超市进销库存管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

开源图表库Echarts 简介与基本使用

ECharts 是一个使用 JavaScript 实现的开源可视化图表库&#xff0c;由百度团队开发。它提供了丰富的图表类型&#xff0c;如折线图、柱状图、饼图、地图、雷达图等&#xff0c;并且可以轻松地与其他前端框架和库集成。ECharts 的设计目的是为了满足复杂数据的可视化需求&#…