Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】

Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】

  • Java 集合概述
    • Collection 接口继承树
    • Map 接口继承树
  • Collection 接口方法
    • 使用 iterator 接口遍历集合元素
    • 使用 forearch 遍历集合元素
  • List 接口
    • List 实现类之一:ArrayList
    • List 实现类之二:LinkedList
  • Set 接口
    • Set 实现类之一:HashSet
    • Set 实现类之二:LinkedHashSet
  • Map 接口方法
    • Map 实现类之一:HashMap
    • Map 实现类之二:LinkedHashMap

Java 集合概述

Java 中的集合主要分为 Collection 和 Map 两大体系

  • Collection 接口:
    • Set:元素无序、不可重复的集合。
    • List:元素有序、可以重复的集合。
  • Map 接口:具有映射关系 key-value 的集合。

Collection 接口继承树

在这里插入图片描述

Map 接口继承树

在这里插入图片描述

Collection 接口方法

Collection 提供的接口方法,set、list 都可以使用。

在这里插入图片描述
在这里插入图片描述

使用 iterator 接口遍历集合元素

  • iterator 对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
  • 所有实现了 Collection 接口的集合类都有一个 iterator() 方法。
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()) {
	System.out.println(iterator.next());
}

使用迭代器进行遍历的时候,迭代器会创建一个对集合内部的快照,并且在遍历的时候期望保持该集合的状态不变。如果迭代过程中集合的元素被改变(添加、删除、修改),迭代器的内部状态和集合的状态不一致就会抛出异常。
解决办法:

  1. 使用并发集合
  2. 删除元素时,可以使用迭代器自带的 remove 方法

使用 forearch 遍历集合元素

在这里插入图片描述

List 接口

List 接口提供了一些根据索引来操作集合元素的方法

// 向指定位置添加元素
void add(int index, Object obj);

// 向指定位置添加一个集合
boolean addAll(int index, Collection objs);

// 获取指定位置的元素
Object get(int index);

// 返回第一个元素出现的下标
int indexOf(Object obj);

// 返回最后一个元素出现的下标
int lastIndexOf(Object obj);

// 移除指定位置的元素
Object remove(int index);

// 修改指定位置的元素
Object set(int index, Object obj);

// 获取集合中的一段元素,从 fromIndex 下标开始,到 toIndex - 1 下标位置
List subList(int fromIndex, int toIndex);

List 实现类之一:ArrayList

本质上是一个变成数组(默认长度是 10)
ArrayList 是线程不安全的,Vector 是线程安全的,即使为保证 List 线程安全,也不推荐使用 Vector。

List 实现类之二:LinkedList

对于频繁插入和删除元素的操作,建议是 LinkedList,效率会高。

新增方法:

// 头部插入一个元素
void addFirst(Object obj);

// 尾部插入一个元素
void addLast(Object obj);

// 获取头部元素
Object getFirst();

// 获取尾部元素
Object getLast();

// 移除头部元素
Object removeFirst();

// 移除尾部元素
Object removeLast();

Set 接口

Set 判断两个对象是否相等使用的不是 ==,而是 equals 方法。

Set 实现类之一:HashSet

  • HashSet 不是线程安全的
  • 不能保证元素的排列顺序
  • 集合元素可以是 null
  • 当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值来决定该对象在 HashSet 中的存储位置。
  • HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。

Set 实现类之二:LinkedHashSet

  • LinkedHashSet 是 HashSet 的子类
  • LinkedHashSet 根据元素的 HashCode 值来决定元素的存储位置,同时使用链表维护元素的次序。

Map 接口方法

// 添加元素
Object put(Object key, Object value);

// 移除元素
Object remove(Object key);

// 添加全部元素
void putAll(Map t);

// 清除元素
void clear();

// 根据 key 查询
Object get(Object key);

// 判断 key 是否存在
boolean containsKey(Object key);

// 判断 value 是否存在
boolean containsKey(Object value);

// 集合大小
int size();

// 判断是否为空
boolean isEmpty();

// 判断是否相等
boolean equals(Object obj);

Map 实现类之一:HashMap

  • HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 返回的 true,hashCode() 值也相等。
  • HashMap 判断两个 value 相等的标准是:两个 value 通过 equals() 返回的 true。

Map 实现类之二:LinkedHashMap

  • 按照插入顺序迭代

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

媒体邀约的好处?怎么邀请媒体?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约的好处主要体现在提高品牌知名度、扩大受众群体以及与媒体建立良好的合作关系。 媒体邀约是一种有效的公关策略,通过吸引媒体关注来促进信息的传播。它可以帮助组织…

传统大数据架构与现代数据平台的期望——Lakehouse 架构(二)

文章目录 前言数据仓库数仓基础好处和优势限制和挑战 数据湖数据湖基础好处和优势限制和挑战 现代数据平台云数据湖与云数仓组合架构现代数据平台的期望Lakehouse 架构的出现未来数据平台的默认选择? 总结 前言 本文概述了传统数据架构:数据仓库和数据湖…

【Linux系列】Ctrl + R 的使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

python后端相关知识点汇总(十二)

python知识点汇总十二 1、什么是 C/S 和 B/S 架构2、count(1)、count(*)、count(列名)有啥区别?3、如何使用线程池3.1、为什么使用线程池? 4、MySQL 数据库备份命令5、supervisor和Gunicorn6、python项目部署6.1、entrypoint.sh制作6.2、Dockerfile制作6…

8.Jetson AGX Orin Ubuntu20.04 gRPC编译安装

Jetson AGX Orin Ubuntu20.04 gRPC编译安装 一、CMake版本检查 grpc编译cmake要求最低版本为3.15。首先,cmake -version 查看当前cmake版本,如果低于3.15,按照以下步骤进行安装。 1.1 卸载已经安装的旧版的CMake sudo apt-get autoremove…

Redmi Turbo 3新品发布,天星金融(原小米金融)优惠加持护航新机体验

Redmi新十年使命不变,挑战不断升级。Redmi Turbo 3,作为Turbo系列的开篇之作,将自身定位为新生代性能旗舰,决心重塑中端性能新格局。据悉,Redmi Turbo 3于4月10日已正式发布。预售期间更是连续数日,蝉联小米…

mac终端使用代理加速下载

环境变量增加前IP: 环境变量配置后,新打开一个终端的ip,开始享受极速吧~

【Python基础】MySQL

文章目录 [toc]创建数据库创建数据表数据插入数据查询数据更新 个人主页:丷从心 系列专栏:Python基础 学习指南:Python学习指南 创建数据库 import pymysqldef create_database():db pymysql.connect(hostlocalhost, userroot, passwordr…

【GIS教程】土地利用转移矩阵、土地利用面积变化

随着科技社会的不断进步,人类活动对地理环境的影响与塑造日益明显,土地不断的侵蚀与改变也导致一系列的环境问题日益突出。土地利用/覆盖(LUCC)作为全球环境变化研究的重点问题为越来越多的国际研究机构所重视,研究它的…

Python大数据分析——岭回归和LASSO回归模型

Python大数据分析——岭回归和LASSO回归模型 模型原因列数多于行数变量和变量间存在多重共线性 岭回归模型理论分析函数示例 LASSO回归模型理论分析函数示例 模型原因 我们为什么要有岭回归和LASSO回归呢? 因为根据线性回归模型的参数估计公式β(X’X)-1X’y可知&…

3DGS渐进式渲染 - 离线生成渲染视频

总览 输入:环绕Object拍摄的RGB视频 输出:自定义相机路径的渲染视频(包含渐变效果) 实现过程 首先,编译3DGS的C代码,并跑通convert.py、train.py和render.py。教程如下: github网址&#xf…

HarmonyOS开发实例:【分布式手写板】

介绍 本篇Codelab使用设备管理及分布式键值数据库能力,实现多设备之间手写板应用拉起及同步书写内容的功能。操作流程: 设备连接同一无线网络,安装分布式手写板应用。进入应用,点击允许使用多设备协同,点击主页上查询…

spring06:mybatis-spring(Spring整合MyBatis)

spring06:mybatis-spring(Spring整合MyBatis) 文章目录 spring06:mybatis-spring(Spring整合MyBatis)前言:什么是 MyBatis-Spring?MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合…

【VIC水文模型】准备工作:平台软件安装

VIC水文模型所需平台软件安装 1 Arcgis安装2 Cygwin安装(Linux系统)3 Matlab/R/Fortran的安装Notepad 4 VIC模型程序代码获取参考 由于VIC模型的编程语言为C语言,交互方式为控制台输指令,需要在Linux系统上运行。Windows 上使用 …

简述PDF原理和实践

Hello,我是小恒不会java。 由于最近有输出PDF报表的项目需求,所以复习一下PDF到底是什么,该如何产生,如何应用至项目中。 更多参见Adobe官方文档(https://www.adobe.com/cn/) PDF原理 PDF(Port…

Docker应用推荐个人服务器实用有趣的项目推荐

Wallabag:是一个开源的、自托管的文章阅读和保存工具。它允许你保存网页文章并进行离线阅读,去除广告和不必要的内容,以提供更好的阅读体验。Wallabag支持多种导入和导出格式,并提供了一些实用的功能,如标签、阅读列表…

Flutter 像素编辑器#03 | 像素图层

theme: cyanosis 本系列,将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】 《Flutter 像素编辑器#01 | 像素网格》《Flutter 像素编辑器#02 | 配置编辑》《Flutter 像素编辑器#03 | 像素图层》 上一篇我们实现了编辑配置,…

【R语言】组合图:散点图+箱线图+平滑曲线图+柱状图

用算数运算符轻松组合不同的ggplot图,如图: 具体代码如下: install.packages("devtools")#安装devtools包 devtools::install_github("thomasp85/patchwork")#安装patchwork包 library(ggplot2) library(patchwork) #p1是…

Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置 IDEA Maven安装配置 Scala(可选) Java Hadoop.dll(可能需要,具体看有无相关错误信息) hadoop-lzo-0.xx.xx.jar(如果你的版本过高,需要到官网下载高版本,mvnrepository仓…

2024年——区块链技术进入全新高度

BTC生态蓬勃发展,以太坊的L1和L2模块化重塑智能合约生态。RAAS(区块链即服务)、Depin、并行EVM等技术的崛起,为区块链应用提供了更高的性能和可扩展性。以太坊再质押成为焦点。技术创新与日俱进,一同探索这个充满活力的…