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

news/2024/5/17 8:45:37

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

  • 按照插入顺序迭代

http://www.mrgr.cn/p/04415821

相关文章

git 拉取或者推送代码报错问题解决

报错截图:当推送远程时,提示无法访问github地址 原因:在拉取或者是提交项目时,会发生git的http和https代理,我们电脑本地已经存在SSL协议的协议,可以取消http和https代理 在git中运行: git config --global --unset http.proxy git config --global --unset https.proxy…

【VUE】使用Vue和CSS动画创建滚动列表

使用Vue和CSS动画创建滚动列表 在这篇文章中,我们将探讨如何使用Vue.js和CSS动画创建一个动态且视觉上吸引人的滚动列表。这个列表将自动滚动显示项目,类似于轮播图的方式,非常适合用于仪表盘、排行榜或任何需要在有限空间内展示项目列表的应…

【MYSQL锁】透彻地理解MYSQL锁

🔥作者主页:小林同学的学习笔录 🔥mysql专栏:小林同学的专栏 目录 1.锁 1.1 概述 1.2 全局锁 1.2.1 语法 1.2.1.1 加全局锁 1.2.1.2 数据备份 1.2.1.3 释放锁 1.2.1.4 特点 1.2.1.5 演示 1.3 表级锁 1.3.1 介绍 …

paddleocr图片文本识别

1. paddleocr  PaddleOCR 是一个基于 PaddlePaddle 深度学习框架的开源 OCR(Optical Character Recognition,光学字符识别)工具。它提供了一系列的预训练模型和工具,可以用于文本检测、文本识别和文本方向检测等任务。 提供了易于使用的 Python API,可以轻松地在你的项目…

Docker入门实战教程

文章目录 Docker引擎的安装Docker比vm虚拟机快 Docker常用命令帮助启动类命令镜像命令docker imagesdocker searchdocker pulldocker system dfdocker rmi 容器命令redis前台交互式启动redis后台守护式启动Nginx容器运行ubuntu交互式运行tomcat交互式运行对外暴露访问端口 Dock…

HarmonyOS NEXT应用开发之图片缩放效果实现

介绍 图片预览在应用开发中是一种常见场景,在诸如QQ、微信、微博等应用中均被广泛使用。本模块基于Image组件实现了简单的图片预览功能。 使用说明:双指捏合缩放图片大小 双击图片进行图片的大小切换 图片在放大模式下,滑动图片查看图片的对应位置效果图预览实现思路image组…

【python之DRF学习】三大方法之认证

title: 【python之DRF学习】三大方法之认证 date: 2024-04-17 21:00:56 星期三 updated: 2024-04-17 21:01:00 星期三 description: cover: 内置三大方法: drf之APIView内部的必须会经过的三大认证/方法: 认证、权限、频率一、认证组件 1、简介 登录认证的限制​ 认证组件…

软考——程序设计语言

1.低级语言和高级语言 计算机硬件只能识别由0、1组成的机器指令序列,即机器指令程序,因此机器指令是最基本的计算机语言。由于机器指令是特定的计算机系统所固有的、面向机器的语言,所以用机器语言进行程序设计时效率很低,程序的…

死锁

多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致俩个或者多个线程都在等待对方释放资源。 package syn;public class DeadLock {public static void main(String[] args) {Makeup s1 = new Makeup(0,"小明");Makeup s2 = new Makeup(…

腾讯音乐:说说Redis脑裂问题?

Redis 脑裂问题是指,在 Redis 哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点已宕机,就会在从节点中选举出一个新的主节点,此时 Redis 的集群中就出现了两个主节点的问题,就是 Redis …

服务器挖矿病毒解决ponscan,定时任务解决

服务器挖矿病毒解决ponscan,定时任务解决 挖矿病毒会隐藏chattr的操作权限,让我们无法删除病毒文件,杀掉病毒进程。所以要去下载chattr.c的文件,编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …

新标准日本语 课后练习

自学错误可能较多,听力题不需要听力的就没听录音 第二十課 スミスさんはピアノを弾くことができます 練習1-1 1張さんは日本の歌を歌うことができます 张先生会唱日本歌 2小野さんは自転車に乗ることがで…

centos7 安装 Mysql 5.7.28,详细完整教程

https://cloud.tencent.com/developer/article/18863391. 下载 MySQL yum包wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm 复制2.安装MySQL源rpm -Uvh mysql57-community-release-el7-10.noarch.rpm 复制3.安装MySQL服务端,需要等待一些时间yum ins…

openGauss Prometheus-Exporter组件环境部署

环境部署用户可以从Prometheus的官网上下载Prometheus-server和node-exporter,然后根据官方文档中的说明启动它们;也可以通过DBMind提供的快捷部署工具进行部署;如果用户自行部署,则可以跳到 部署过程中为支持部署位置正确以及后续的运行和监测...。通过命令行进行Promethe…

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)

目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址:STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB,今…

第 6 章 URDF、Gazebo与Rviz综合应用(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.7 URDF、Gazebo与Rviz综合应用 关于URDF(Xacro)、Rviz 和 Gazebo 三者的关系,前面已有阐述&…

【进程地址空间】进程的独立性 | 虚拟地址物理地址 | 页表 | 写时拷贝

目录 前言 基本概念 进程的独立性 虚拟地址&物理地址 进程地址空间 页表(虚拟地址☞物理地址) 写时拷贝 基本理解 地址空间 写时拷贝(浅拷贝) 数据独立性的保证☞写时拷贝 写时拷贝的优点 图解分析 前言 我们…

【Azure APIM】列举几种在APIM 策略中的主动生产的错误语句

问题描述 在为APIM服务配置了诊断日志(Diagnostic Setting),把日志收集在Log A Workspace中,需要验证日志中是否能查看到请求的错误信息。所以想人为的来制造一些错误。经过网络搜索,参考Policy的文档介绍后,完成了以下3种错误 第一种:使用 return-response 返回指定错误…

CORS 跨域问题解决预检(OPTIONS)请求解释

场景: 业务要求从把系统B嵌入到系统A中,系统A和系统B是完成不同的两个域名,前端同事完成系统嵌入后,从A系统内部调用B系统的接口时候发现跨域错误(CORS error),如下: 什么是跨域&…

01-项目概述

1. 产品说明 神领物流系统类似顺丰速运,是向 C 端用户提供快递服务的系统。竞品有:顺丰、中通、圆通、京东快递等。 项目产品主要有 4 端产品:用户端:基于微信小程序开发,外部客户使用,可以寄件、查询物流信息等。 快递员端:基于安卓开发的手机 APP,公司内部的快递员使…