集合、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://xiahunao.cn/news/2803781.html

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

相关文章

数据库面试题汇总,助你轻松应对面试!

考虑到最近有些小伙伴准备跳槽&#xff0c;所以更新一些数据库相关的面试题&#xff0c;希望能帮到大家&#xff01; 一 请写出创建表的基本语法结构&#xff1f; 创建表的基本语法结构如下&#xff1a; CREATE TABLE IF NOT EXISTS 表名(字段名1 字段类型,字段名2 字段类型 …

哪个蓝牙耳机好用?2024最新蓝牙耳机选购指南,实测避坑!

​蓝牙耳机已成为现代生活中不可或缺的一部分。无论你是追求高品质音质、注重佩戴体验&#xff0c;还是在意性价比&#xff0c;市场上总有适合你的那一款。希望通过我的推荐和分析&#xff0c;你能找到一款真正适合自己的蓝牙耳机&#xff0c;让你的音乐之旅更加精彩。 一、选购…

【2024软件测试面试必会技能】Charles(6):Charles设置弱网

设置弱网&#xff08;慢网速&#xff09; 方法一&#xff1a;点击Charles 上方的乌龟标志&#xff0c;模拟网络延迟&#xff1b; 方法二&#xff1a;点击Proxy——Throttle Settings——勾选Enable Throttling——再勾选Only for selected hosts——点击Add,设置指定的域名——…

【Vuforia+Unity】AR05-实物3D模型识别功能实现(ModelTarget )

不管是什么类型的识别Vuforia的步骤基本都是&#xff1a; 把被识别的物体转成图、立体图、柱形图&#xff0c;3D模型、环境模型&#xff0c;然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容&#xff0c;然后参考模型自动隐藏-发布APP-识别生活中实物-数字内…

kettle计算增长率

kettle计算增长率 问题描述处理方法 问题描述 读取一段时间内的数据记录&#xff0c;计算相邻记录的比率 iddatevalue12024-01-0110012024-01-0211012024-01-0312012024-01-0490 处理方法 1.使用统计中的分析查询节点能在每一行中添加前后行的数据 2.使用计算器节点计算比…

蓝牙耳机哪个品牌质量好?2024超高性能机型比拼推荐

​无线耳机已经成为现代生活中的必备数码产品&#xff0c;尤其在感受到无线带来的自由后&#xff0c;很难再适应有线耳机的束缚。因此&#xff0c;耳机市场竞争激烈&#xff0c;各种类型和外观的耳机层出不穷。在此&#xff0c;我为大家总结了五款使用体验很不错的蓝牙耳机&…

ESP8266智能家居(1)——开发环境的搭建

1.前期介绍 本次打算使用esp8266的开发板——NodeMCU&#xff0c;进行物联网相关项目的学习。开发环境使用Arduino软件。 NodeMCU实物图为&#xff1a; 开发环境截图为&#xff1a; 2.软件下载 我使用的arduino版本为1.8.5&#xff0c;其安装包如下&#xff1a; 【免费】ar…

区块链笔记(五)---德勤相关分析报告

web3.0 定义&#xff1a; 在《Insights into a Modern World》提出&#xff0c;“信息将由用户自己发布、保管、不可追溯且永远不会泄露&#xff0c;用户的任何行为将不需要任何中间机构来帮助传递”&#xff1b;用来指代一种区块链技术&#xff0c;可以基于“无须信任的交互…

2024年阿里云新用户购买云服务器有哪些优惠活动?

2024年阿里云服务器购买、续费、升级优惠政策整理&#xff0c;阿里云服务器优惠价格表&#xff1a;轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年&#xff0c;云服务器4核16G10M带宽26元1个月、149元半年&#xff0c;阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价…

精酿啤酒:麦芽与啤酒花搭配的奥秘

麦芽和啤酒花是啤酒酿造过程中不可或缺的原料&#xff0c;它们的风味和特点对啤酒的口感和品质产生着深远的影响。Fendi Club啤酒在麦芽与啤酒花的搭配方面有着与众不同的技巧和见解&#xff0c;让啤酒的口感更加丰富和迷人。 首先&#xff0c;麦芽的选择是啤酒酿造的关键之一。…

springboot211基于springboot医疗报销系统的设计与实现

医疗报销系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;报销单信息因为其管理内容繁杂&#xff0c;管理数量繁多…

【C++】——模板初阶 | STL简介

前言: 模板初阶 | STL简介 文章目录 一、模板初阶1.1 函数模板1.2 类模板 二、STL简介 &#xff08;了解&#xff09; 一、模板初阶 泛式编程&#xff08;Generic Programming&#xff09;指的是一种编程范式&#xff0c;其核心思想是编写可以在不同数据类型上通用的代码&#…

C语言中的assert.h:调试助手与断言详解

在C语言编程中&#xff0c;assert.h头文件提供了非常有用的断言&#xff08;Assertion&#xff09;功能&#xff0c;它主要用于开发和调试阶段&#xff0c;确保程序在运行时满足某些预期条件。如果这些条件未得到满足&#xff0c;则程序会立即停止执行&#xff0c;并打印出有关…

架构师技能9-深入mybatis:Creating a new SqlSession到查询语句耗时特别长

开篇语录&#xff1a;以架构师的能力标准去分析每个问题&#xff0c;过后由表及里分析问题的本质&#xff0c;复盘总结经验&#xff0c;并把总结内容记录下来。当你解决各种各样的问题&#xff0c;也就积累了丰富的解决问题的经验&#xff0c;解决问题的能力也将自然得到极大的…

操作系统--调度算法

一、进程调度算法&#xff08;CPU调度算法&#xff09; 什么时候会发生 CPU 调度呢&#xff1f;通常有以下四种情况&#xff1a; 「抢占式调度」&#xff1a;进程正在运行的时&#xff0c;可以被打断&#xff0c;使其把 CPU 让给其他进程。那抢占的原则一般有三种&#xff0c…

测试用例设计方法:招式组合,因果判定出世

1 引言 上篇讲了等价类划分和边界值分析法&#xff0c;而这两种方法只考虑了单个的输入条件&#xff0c;并未考虑输入条件的各种组合、输入条件之间的相互制约关系的场景。基于此短板&#xff0c;因果图法和判定表法应运而生。 2 因果图法 2.1 概念及原理 2.1.1 定义 一种…

BLEU: a Method for Automatic Evaluation of Machine Translation

文章目录 BLEU: a Method for Automatic Evaluation of Machine Translation背景和意义技术原理考虑 n n n - gram中 n 1 n1 n1 的情况考虑 n n n - gram中 n > 1 n\gt 1 n>1 的情况考虑在文本中的评估初步实验评估和结论统一不同 n n n 值下的评估数值考虑句子长度…

一文了解L7812CV的引脚图介绍、参数解读

L7812CV简介 L7812CV是一款具有稳压功能的正向型线性稳压器&#xff0c;能够将输入电压稳定输出为12V的直流电压。它适用于各种需要12V电源的电子设备、电路和系统。 引脚图介绍 L7812CV有三个引脚&#xff0c;分别为输入引脚&#xff08;输入电压Vin&#xff09;、地引脚&…

什么是智慧公厕?智慧公厕跟传统公共厕所的区别

智慧公厕是近年来新兴起的一种公共设施&#xff0c;通过物联网技术的应用&#xff0c;实现了公厕的全面感知、全时监测、全方位精细化管理。与传统的公共厕所相比&#xff0c;智慧公厕在许多方面带来了翻天覆地的变化。本文以智慧公厕源头厂家广州中期科技有限公司&#xff0c;…

【2024.02.22】定时执行专家 V7.0 发布 - TimingExecutor V7.0 Release - 龙年春节重大更新版本

目录 ▉ 新版本 V7.0 下载地址 ▉ V7.0 新功能 ▼2024-02-21 V7.0 - 更新日志▼ ▉ V7.0 新UI设计 ▉ 新版本 V7.0 下载地址 BoomWorks软件的最新版本-CSDN博客文章浏览阅读10w次&#xff0c;点赞9次&#xff0c;收藏41次。▉定时执行专家—毫秒精度、专业级的定时任务执行…