java基础从入门到上手(九):Java - List、Set、Map

一、List集合

        List 是一种用于存储有序元素的集合接口,它是 java.util 包中的一部分,并且继承自 Collection 接口。List 接口提供了多种方法,用于按索引操作元素,允许元素重复,并且保持插入顺序。常用的 List 实现类包括 ArrayList、LinkedList 和 Vector。

1.1概述

        List 接口继承自 Collection 接口,它支持按索引访问元素。与 Set 不同,List 允许存储重复元素,并且可以通过索引获取、插入和删除元素。

List 常用方法:

add(E e):将元素 e 添加到列表的末尾。

add(int index, E element):将元素 element 插入到指定的索引位置。

get(int index):返回指定位置的元素。

set(int index, E element):将指定位置的元素替换为新的元素。

remove(int index):删除指定位置的元素。

remove(Object o):删除指定的元素。

size():返回列表的元素个数。

isEmpty():检查列表是否为空。

contains(Object o):检查列表是否包含指定元素。

indexOf(Object o):返回元素首次出现的位置(如果不包含则返回 -1)。

lastIndexOf(Object o):返回元素最后一次出现的位置。

clear():清空列表。

1.2 实现类

1.2.1 ArrayList

ArrayList 是最常用的 List 实现,它基于动态数组来存储元素,支持快速的随机访问。

优点:

1.提供快速的访问操作(get 和 set)。

2.插入和删除元素时,位于末尾的操作非常高效。

缺点:

1.插入和删除元素时,尤其是对中间位置的元素,性能较差,因为需要移动元素。

1.2.2 LinkedList

LinkedList 是 List 接口的另一个实现,它基于双向链表实现,因此在插入和删除元素时效率较高,尤其是在列表的头部和中间位置。

优点:

  1. 插入和删除操作(尤其是在头部或中间位置)性能较好。
  2. 支持队列和栈的操作(通过 offer、poll、push 和 pop 方法)。

缺点:

  1. 随机访问性能较差,特别是当需要访问列表中的元素时,它需要从头部或尾部开始遍历。

1.2.3 Vector

Vector 类与 ArrayList 类类似,也基于动态数组实现,但与 ArrayList 的区别在于,Vector 是线程安全的(每个方法都使用 synchronized 关键字进行同步)。但由于同步的开销,它的性能通常较差。

优点:

  1. 线程安全。

缺点:

  1. 性能较差,因为所有的方法都进行了同步操作。
  2.  不推荐在新代码中使用。

二、Set集合

Set 是一个不允许重复元素的集合接口。它继承自 Collection 接口,并且提供了与 List 不同的行为:Set 不保证元素的插入顺序,并且不允许包含重复元素。因此,Set 在应用程序中用于需要保证元素唯一性的场景。

Set 接口代表一个集合,主要特点如下:

  1. 不允许包含重复的元素。
  2. 不保证元素的顺序(但某些实现可能会有顺序,如 LinkedHashSet)。
  3. 基本操作包括添加、删除和查找元素。

Set 接口的常见实现类包括:

  1. HashSet:最常用的实现类,基于哈希表,不保证元素的顺序。
  2. LinkedHashSet:与 HashSet 类似,但它保持插入顺序。
  3. TreeSet:基于红黑树实现,按元素的自然顺序(或自定义的比较器)对元素进行排序。

Set 接口的常用方法

add(E e):将元素 e 添加到集合中。如果集合已经包含该元素,则返回 false。

remove(Object o):删除指定的元素。

contains(Object o):检查集合中是否包含指定的元素。

size():返回集合中的元素数量。

isEmpty():检查集合是否为空。

clear():清空集合中的所有元素。

iterator():返回集合元素的迭代器,通常用于遍历集合。

2.1 HashSet

HashSet 是最常用的 Set 实现,基于哈希表实现,不保证元素的顺序。它的操作通常是快速的(平均时间复杂度为 O(1)),但不保证插入顺序。

2.2 LinkedHashSet

LinkedHashSet 继承自 HashSet,它保持元素的插入顺序(通过链表维护插入顺序)。与 HashSet 相比,LinkedHashSet 的插入操作稍慢一些,但它保证了元素的顺序。

2.3 TreeSet

TreeSet 是一个基于红黑树实现的 Set,它会自动按元素的自然顺序(或指定的比较器)对元素进行排序。TreeSet 中的元素是有序的,因此它支持基于排序的操作(如查找最小元素、最大元素等)。

2.4 应用场景

去重:Set 常用于去重操作,因为它不允许包含重复元素。可以利用 Set 来确保数据的唯一性。

集合运算:可以使用 Set 来进行集合的并集、交集和差集操作。Set 提供了 retainAll(交集)、removeAll(差集)和 addAll(并集)等方法。

三、Map集合

Map 是一个用于存储键值对(key-value)映射的集合接口。Map 与 Set 和 List 不同,因为它是根据键(key)来存储值(value)的,而不是按照元素的顺序或索引顺序。Map 接口并不继承自 Collection 接口,虽然它也可以存储多个对象,但它的结构是以键值对的形式组织的。

主要特点:

  1. 键唯一:Map 中的每个键都是唯一的,但多个键可以对应相同的值。
  2. 无序性:Map 本身并不保证键值对的存储顺序,但是一些实现类(如 LinkedHashMap)可以保证顺序。
  3. 支持快速查找:通过键可以非常高效地找到对应的值。

3.1 HashMap

HashMap 是最常用的 Map 实现类,基于哈希表实现,不保证键值对的顺序。它的查找和插入操作平均时间复杂度是 O(1),非常高效。

3.2 LinkedHashMap

LinkedHashMap 继承自 HashMap,除了基于哈希表存储元素外,还通过链表维护键值对的插入顺序。它保证了元素的插入顺序,因此适用于需要顺序存储的场景。

3.3 TreeMap

TreeMap 是一个有序的 Map 实现类,它基于红黑树实现,按键的自然顺序(或通过构造时提供的比较器)对键值对进行排序。它支持键值对的排序操作。

3.4 Hashtable

Hashtable 是一个古老的线程安全的 Map 实现,它的行为类似于 HashMap,但它是同步的,因此比 HashMap 更慢。由于现代 Java 程序更倾向于使用 ConcurrentHashMap 或其他线程安全的集合类,Hashtable 现在很少使用。

3.5Map 接口常用方法

put(K key, V value):将指定的值与指定的键关联。如果键已经存在,则更新值。

get(Object key):返回指定键所映射的值。如果键不存在,返回 null。

containsKey(Object key):检查 Map 是否包含指定的键。

containsValue(Object value):检查 Map 是否包含指定的值。

remove(Object key):删除指定键的键值对。

size():返回 Map 中键值对的数量。

isEmpty():检查 Map 是否为空。

clear():清空 Map 中的所有键值对。

keySet():返回 Map 中所有键的集合。

values():返回 Map 中所有值的集合。

entrySet():返回 Map 中所有键值对的集合,Map.Entry 是 Map 键值对的表示。

通过以上内容便可轻松学习java 的集合类.是不是超级简单.有任何问题欢迎留言哦!!!

重点!重点!重点!

遇到问题不用怕不如来我的知识库找找看,也许有意想不到的收获!!!

易网时代-易库资源-易库教程:.NET开发、Java开发、PHP开发、SqlServer技术、MySQL技术-开发资料大全-易网时代-易库资源-易库教程 (escdns.com)

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

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

相关文章

UWP发展历程

通用Windows平台(UWP)发展历程 引言 通用Windows平台(Universal Windows Platform, UWP)是微软为实现"一次编写,处处运行"的愿景而打造的现代应用程序平台。作为微软统一Windows生态系统的核心战略组成部分,UWP代表了从传统Win32应用向现代应…

git忽略已跟踪的文件/指定文件

在项目开发中,有时候我们并不需要git跟踪所有文件,而是需要忽略掉某些指定的文件或文件夹,怎么操作呢?我们分两种情况讨论: 1. 要忽略的文件之前并未被git跟踪 这种情况常用的方法是在项目的根目录下创建和编辑.gitig…

AI 组件库是什么?如何影响UI的开发?

AI组件库是基于人工智能技术构建的、面向用户界面(UI)开发的预制模块集合。它们结合了传统UI组件(如按钮、表单、图表)与AI能力(如机器学习、自然语言处理、计算机视觉),旨在简化开发流程并增强…

【Win】 cmd 执行curl命令时,输出 ‘命令管道位置 1 的 cmdlet Invoke-WebRequest 请为以下参数提供值: Uri: ’ ?

1.原因: 有一个名为 Invoke-WebRequest 的 CmdLet,其别名为 curl。因此,当您执行此命令时,它会尝试使用 Invoke-WebRequest,而不是使用 curl。 2.解决办法 在cmd中输入如下命令删除这个curl别名: Remov…

UE5 UE循环体里怎么写延迟

注:需要修改UE循环蓝图节点或者自己新建个蓝图宏库把UE循环节点的原来代码粘贴进去修改。 一、For Loop With Delay 二、For Each Loop With Delay 示例使用: 标注参考出处:分享UE5自制Loop with delay宏,在loop循环中添加执行…

IP检测工具“ipjiance”

目录 IP质量检测 应用场景 对网络安全的贡献 对网络管理的帮助 对用户决策的辅助作用 IP质量检测 检测IP的网络提供商:通过ASN(自治系统编号)识别IP地址所属的网络运营商,例如电信、移动、联通等。 识别网络类型&#xff1…

[工具]Java xml 转 Json

[工具]Java xml 转 Json 依赖 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.37</version> </dependen…

vue3 传参 传入变量名

背景&#xff1a; 需求是&#xff1a;在vue框架中&#xff0c;接口传参我们需要穿“变量名”&#xff0c;而不是字符串 通俗点说法是&#xff1a;在网络接口请求的时候&#xff0c;要传属性名 效果展示&#xff1a; vue2核心代码&#xff1a; this[_keyParam] vue3核心代码&…

spring响应式编程系列:总体流程

目录 示例 程序流程 just subscribe new LambdaMonoSubscriber ​​​​​​​MonoJust.subscribe ​​​​​​​new Operators.ScalarSubscription ​​​​​​​onSubscribe ​​​​​​​request ​​​​​​​onNext 时序图 类图 数据发布者 MonoJust …

基于slimBOXtv 9.16 V2-晶晨S905L3A/ S905L3AB-Mod ATV-Android9.0-线刷通刷固件包

基于slimBOXtv 9.16 V2-晶晨S905L3A&#xff0f; S905L3AB-Mod ATV-Android9.0-线刷通刷固件包&#xff0c;基于SlimBOXtv 9 修改而来&#xff0c;贴近于原生ATV&#xff0c;仅支持晶晨S905L3A&#xff0f; S905L3AB芯片刷机。 适用型号&#xff1a;M401A、CM311-1a、CM311-1s…

使用droidrun库实现AI控制安卓手机

使用droidrun库实现AI控制安卓手机 介绍 DroidRun 是一个框架&#xff0c;通过LLM代理控制 Android 设备。它允许您使用自然语言命令自动化 Android 设备交互。 安装环境 安装源码依赖 git clone https://github.com/droidrun/droidrun.git cd droidrun conda create --nam…

知识库建设全流程指南(AI时代优化版)

知识库建设全流程指南&#xff08;AI时代优化版&#xff09; ​​一、知识库建设的战略定位​​ ​​核心价值锚点​​ ​​AI时代基建​​&#xff1a;知识库是GEO优化的核心载体&#xff0c;决定内容被AI引用的概率权重​​动态护城河​​&#xff1a;结构化知识体系可抵御算…

2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(五级)真题

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;五级&#xff09; 分数&#xff1a;100 题数&#xff1a;38 答案解析&#xff1a;https://blog.csdn.net/qq_33897084/article/details/147341437 一、单选题(共25题&#xff0c;共50分) 1. 以下哪个选…

基于RRT的优化器:一种基于快速探索随机树算法的新型元启发式算法

受机器人路径规划中常用的快速探索随机树&#xff08;RRT&#xff09;算法的搜索机制的启发&#xff0c;我们提出了一种新颖的元启发式算法&#xff0c;称为基于RRT的优化器&#xff08;RRTO&#xff09;。这是首次将RRT算法的概念与元启发式算法相结合。RRTO的关键创新是其三种…

进阶篇|CAN FD 与性能优化

引言 1. CAN vs. CAN FD 对比 2. CAN FD 帧结构详解

【随身WiFi】随身WiFi Debian系统优化教程

0.操作前必看 本教程基于Debian系统进行优化&#xff0c;有些操作对随身WiFi来说可能会带来负优化&#xff0c;根据需要选择。 所有操作需要在root用户环境下运行&#xff0c;否则都要加sudo 随身wifi Debian系统&#xff0c;可以去某安的随声WiFi模块自行搜索刷机 点赞&am…

【Pandas】pandas DataFrame where

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签&#xff08;行标签和列标签&#…

C++代码优化

前段时间写了一些代码&#xff0c;但是在运算过程中发现有些代码可以进行改进以提高运行效率&#xff0c;尤其是与PCL相关的部分&#xff0c;可以进行大幅度提高&#xff0e;特意在此进行记录&#xff0c;分享给大家&#xff0c;也供自己查看&#xff0e; pcl::PointCloud< …

RAG-分块策略

分块策略在检索增强生成&#xff08;RAG&#xff09;方法中起着至关重要的作用&#xff0c;它使文档能够被划分为可管理的部分&#xff0c;同时保持上下文。每种方法都有其特定的优势&#xff0c;适用于特定的用例。将大型数据文件拆分为更易于管理的段是提高LLM应用效率的最关…

Linux网络编程 深入解析TFTP协议:基于UDP的文件传输实战

知识点1【TFTP的概述】 学习通信的基本&#xff1a;通信协议&#xff08;具体发送上面样的报文&#xff09;、通信流程&#xff08;按照什么步骤发送&#xff09; 1、TFTP的概述 tftp&#xff1a;简单文件传输协议&#xff0c;**基于UDP&#xff0c;**不进行用户有效性验证 …