Java集合(Collection+Map)
Java集合(Collection+Map)
- 为什么要使用集合?
- 泛型 <>
- 集合框架
- 单列集合Collection
- Collection遍历方式
- List:有序、可重复、有索引
- ArrayList
- LinkedList
- Vector(已经淘汰,不会再用)
- Set:无序、不重复、无索引
- HashSet
- LinkedHashSet
- TreeSet
- 双列集合Map
- HashMap
- LinkedHashMap
- HashTable(后续补充)
- Properties
- TreeMap
- Collections 集合工具类
来自黑马,把视频截图保存,主要为了自己方便查找。
为什么要使用集合?
当有很多数据需要存储时,会想到用数组,而数组需要在定义时指定长度,而我们希望有一个可变长度的容器——集合。
集合可以自动扩容,提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据。

泛型 <>

集合框架

红色表示接口,蓝色表示实现类:


键和值之间一一对应。键值对也成为键值对对象,或者是Entry对象。



单列集合Collection





在Java里面,字符串已经重写好了equals方法。

Collection遍历方式
以前的普通的for循环的遍历方式适用于有索引的list系列,而没有索引的set系列不能用。
1. 迭代器遍历



2. 增强for遍历


3. lambda表达式遍历

一行搞定:

List:有序、可重复、有索引

- 添加元素:添加完之后,原来索引上的元素会依次后移。
- 删除元素:下面第一个会删除1索引,第二个装箱了,会删除“1”

独有的遍历方式: 继承了Collection的遍历方式。
- 迭代器
- 增强for
- Lambda表达式
- 普通for循环(因为List集合存在索引)

- 列表迭代器遍历

总结:

ArrayList

输出是 []

import java.util.*;
public class Main {public static void main(String[] args) {//1.创建一个集合ArrayList<String> list = new ArrayList<>();System.out.println(list); //[]//2.添加元素: 对于add方法,在ArrayList里面,不管添加什么,都会返回true
// boolean result = list.add("aaa");
// System.out.println(result); //true
// System.out.println(list); //[aaa]// 所以一般直接添加元素就行,不用管返回值list.add("aaa");list.add("bbb");list.add("ccc");System.out.println(list); //[aaa, bbb, ccc]//3.删除元素list.remove("aaa");System.out.println(list); //[bbb, ccc]String str = list.remove(0); //这里也可以不接收返回值,直接list.remove(0)System.out.println(str); //bbbSystem.out.println(list); //[ccc]//4.修改元素String str1 = list.set(0, "ddd");System.out.println(str1); //ccc,返回被覆盖的元素System.out.println(list); //[ddd],结果就是覆盖以后的//5.查询元素String str2 = list.get(0);System.out.println(str2); //ddd,获取单个元素//遍历list.add("eee");list.add("fff");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i)); //依次输出ddd eee fff}System.out.println(list); //[ddd, eee, fff],直接打印就是集合}
}
LinkedList

我们在项目中一般是不会使用到 LinkedList 的,需要用到 LinkedList 的场景几乎都可以使用 ArrayList 来代替,并且,性能通常会更好!就连 LinkedList 的作者约书亚 · 布洛克(Josh Bloch)自己都说从来不会使用 LinkedList 。
另外,不要下意识地认为 LinkedList 作为链表就最适合元素增删的场景。我在上面也说了,LinkedList 仅仅在头尾插入或者删除元素的时候时间复杂度近似 O(1),其他情况增删元素的时间复杂度都是 O(n) ,因为需要从头或尾开始寻找!
Vector(已经淘汰,不会再用)
Set:无序、不重复、无索引

set遍历:

首先添加元素,如果是第一次添加,返回True,第二次就不行了,返回False:

遍历:

HashSet







加载因子表示的是扩容时机,当数组里面的元素到了16*0.75=12个的时候,数组长度就加倍,变成了32。而当链表长度大于8而且数组长度大于等于64,就会自动编程红黑树:

了解了底层原理,就可以回答HashSet的问题:

如图所示,读取的顺序是图中的123456,但是存的顺序就不一定了。
问题2:HashSet为什么没有索引?
图中1索引对应的位置有好几个元素,不好区分,所以干脆无索引。
问题3:HashSet是利用什么机制保证数据去重的?
用HashCode方法和equals方法,所以如果集合中存储的是自定义对象(如Student),一定要根据对象的属性重写这两个方法,要不然就会比较地址值!
这里为什么会强调自定义对象要重写:如果存储的是基本数据类型的包装类,已经正确地重写了hashCode()和equals()方法。对于 Java 标准库中的许多类(如String),也已经合理地重写了hashCode()和equals()方法。
LinkedHashSet


添加进去的1和2,2和3,3和4……两两之间有双向链表,互相记录地址值。遍历的时候也是从1开始遍历。



TreeSet


如果字符串里面字母很多,那就从第一个字母开始比较:
“aaa” > “ab” > “aba” > “cd” > “qwer”
双列集合Map

①添加


②删除


Map的三种遍历方式:









HashMap


存储的时候只比较键的属性值,如果一样,就要覆盖,这一点和Set不同(Set是不存)! 这就是put里面覆盖的功能!

- HashMap底层是哈希表结构的
- 依赖hashCode方法和equals方法保证键的唯一
- 如果键存储的是自定义对象,需要重写hashCode和equals方法
如果值存储自定义对象,不需要重写hashCode和equals方法
LinkedHashMap


HashTable(后续补充)
Properties
TreeMap


这样直接输出已经是升序,如果要降序:

Collections 集合工具类



相关文章:
Java集合(Collection+Map)
Java集合(CollectionMap) 为什么要使用集合?泛型 <>集合框架单列集合CollectionCollection遍历方式List:有序、可重复、有索引ArrayListLinkedListVector(已经淘汰,不会再用) Set…...
微信小程序02-页面制作
微信小程序页面制作指南 目录 微信小程序页面制作 1. 个人信息展示小程序 案例分析 需求背景:许多大学生毕业后需要求职,因此制作一个展示个人信息的微信小程序对招聘人员快速了解求职者非常有帮助。页面布局:页面分为头像区域和详细信息…...
zabbix监控端界面时间与服务器时间不对应
1. 修改系统时间 # tzselect Please select a continent, ocean, "coord", or "TZ".1) Africa2) Americas3) Antarctica4) Asia5) Atlantic Ocean6) Australia7) Europe8) Indian Ocean9) Pacific Ocean 10) coord - I want to use geographical coordina…...
端对端加密是如何通过SDK防御实现的?
端对端加密(End-to-End Encryption,E2EE)是一种确保数据在传输过程中不被第三方截获和篡改的技术。随着网络安全威胁的日益增多,端对端加密在即时通讯、文件传输等领域变得越来越重要。本文将详细介绍如何通过SDK(Soft…...
Flutter:input输入框
输入框: // 是否显示关闭按钮 bool _showClear false; // 文字编辑控制器,监听搜索框的变化。 final TextEditingController _controller TextEditingController(); // 输入框发生变化事件 void _onChange(String value){if(value.length > 0){setS…...
RabbitMQ 与 PHP Swoole 实现
RabbitMQ 与 PHP Swoole 的结合实现 一、概述 RabbitMQ 是一个开源的消息队列中间件,允许通过异步消息传递来解耦应用程序的各个部分。Swoole 是一个高性能的 PHP 扩展,支持异步编程和协程,适用于构建高并发的网络服务。将 RabbitMQ 与 Swo…...
【计算机体系架构】 MESI缓冲一致性
高并发学习参考 https://blog.csdn.net/MrYushiwen/article/details/123049838 https://cloud.tencent.com/developer/article/2197857 ESI 是指Cache 行的三种一致性状态:E(Exclusive,独占),S(Shared&…...
STM32设计学生宿舍监测控制系统
目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 随着科技的飞速发展和智能化时代的到来,学生宿舍的安全、舒适…...
企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群
前言:Apache Kafka是一个分布式流处理平台,由LinkedIn开发并捐赠给Apache软件基金会。它主要用于构建实时数据流管道和流应用。Kafka具有高吞吐量、可扩展性和容错性的特点,适用于处理大量数据。 以下是Kafka的一些核心概念和特性࿱…...
awk(常用)
这个有点难 O.o 一、awk # 语法 awk 参数 模式 {动作} 文件# 第一列,包含p的 $1~"p" # 第一列,不包含p的 $1!~"p" # 开始时干嘛,结束时干嘛 awk BEGIN{开始时做的事}END{结束时做的事}{print $0} 文件 1、内置变量&…...
Amazon Web Services (AWS)
一、Amazon Web Services (AWS)介绍 1、简介 2、产品 AWS 提供了各种云计算服务,包括 DynamoDB、S3、EC2、Lambda 等等。 登录aws后点击所有服务也可以看到amazon的所有服务: 3、免费试用产品 除了免费的Amazon Step Functions、Amazon Lambda&#…...
Java EE 技术基础知识体系梳理
1. Java EE 平台概述 1.1 发展历程 Java EE 从 J2EE 发展而来,经历了多个版本的演进,从早期的 J2EE 1.2 到最新的 Jakarta EE。 1.2 架构特点 多层架构: 客户端层:用户界面,如 Web 浏览器、移动应用等。Web 层&…...
【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...
HDFS新增节点和删除datanode节点
在实际的hadoop环境中,有时我们需要新增或者删除datanode节点,来达到扩容或缩容的目的,本文就来讲解如何新增和删除datanode。 新增节点和删除节点会涉及两个关键的配置项(hdfs-site.xml文件中): dfs.hos…...
数据结构-线性表-具有独立头节点的双向循环链表
完整代码: #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:6013)#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h>// 一个具有独立头节点的双向循环链表, // 区别在于将头节点和数据区域…...
CSS 响应式设计之媒体查询技术
CSS 媒体查询(Media Queries)是一种根据不同设备的特性(如屏幕宽度、分辨率、方向等)来应用不同的 CSS 样式的技术。它通常用于响应式设计,帮助网页在不同设备和屏幕尺寸下良好地展示。 基本语法 media (条件) {/* 样…...
HARCT 2025 分论坛4:智能系统传感、传感器开发和数据融合中的智能数据分析
机电液一体化与先进机器人控制技术国际会议(HARCT 2025)将于2025年1月3日-6日在中国广西桂林召开。本届会议围绕“机电液一体化”“机器人”“控制技术”等最新研究成果,邀请海内外在这一领域贡献卓著的专家学者做精彩致辞和报告。 会议期间…...
云计算研究实训室建设方案
一、引言 随着云计算技术的迅速发展和广泛应用,职业院校面临着培养云计算领域专业人才的迫切需求。本方案旨在构建一个先进的云计算研究实训室,为学生提供一个集理论学习、实践操作、技术研发与创新于一体的综合性学习平台,以促进云计算技术…...
VRT: 关于视频修复的模型
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月15日14点34分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
实习冲刺Day22
算法题 路径总和 112. 路径总和 - 力扣(LeetCode) class Solution { public:bool hasPathSum(TreeNode* root, int targetSum) {if(!root)return 0;//节点为空返回0int sumroot->val;//记录当前节点的值int ntargetSum-sum;//距离目标值还差多少if…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
