Java 之集合框架的详细介绍

news2024/11/26 17:25:18

在这里插入图片描述

文章目录

    • 总的介绍
      • 1. **Collection 接口**
      • 2. **List 接口**
      • 3. **Set 接口**
      • 4. **Map 接口**
      • 5. **HashMap、LinkedHashMap、TreeMap**
      • 6. **Queue 接口**
      • 7. **Deque 接口**
    • ArrayList 类
      • 1. **创建 ArrayList:**
      • 2. **添加元素:**
      • 3. **插入元素:**
      • 4. **获取元素:**
      • 5. **修改元素:**
      • 6. **删除元素:**
      • 7. **查找元素:**
      • 8. **获取大小:**
      • 9. **遍历 ArrayList:**
      • 完整示例:
    • set接口以及实现类
      • HashSet 类
      • 创建 HashSet:
      • 添加元素:
      • 查找元素:
      • 删除元素:
      • 获取大小:
      • 遍历 HashSet:
      • 用Set 对象实现集合运算
      • 1. 并集(Union):
      • 2. 交集(Intersection):
      • 3. 差集(Difference):
      • 判断是否为子集:
      • TreeSet 类
      • 创建 TreeSet:
      • 添加元素:
      • 查找第一个元素:
      • 删除元素:
      • 获取大小:
      • 遍历 TreeSet:
      • 对象顺序

Java 集合框架提供了一组实现常见数据结构(如列表、集合、映射等)的类和接口,使得数据的存储、检索、操作更加方便和高效。集合框架主要包括以下核心接口和类:

总的介绍

1. Collection 接口

Collection 接口是集合框架的根接口,它定义了一组通用的方法,适用于所有集合类。主要有:

  • add(E e): 将指定的元素添加到集合中。
  • remove(Object o): 从集合中移除指定的元素。
  • size(): 返回集合中的元素数量。
  • isEmpty(): 判断集合是否为空。
  • contains(Object o): 判断集合是否包含指定的元素。
  • iterator(): 返回一个迭代器,用于遍历集合中的元素。

2. List 接口

List 接口继承自 Collection 接口,表示有序的集合,允许重复元素。主要特点是可以通过索引访问元素。常用的实现类有 ArrayListLinkedListVector

3. Set 接口

Set 接口继承自 Collection 接口,表示不允许重复元素的集合。主要特点是不维护元素的顺序。常用的实现类有 HashSetLinkedHashSetTreeSet

4. Map 接口

Map 接口表示键值对的集合,每个键关联一个值。键不能重复,但值可以。主要方法包括:

  • put(K key, V value): 将指定的键值对存储到 Map 中。
  • get(Object key): 返回与指定键关联的值。
  • remove(Object key): 从 Map 中移除指定键的映射。
  • containsKey(Object key): 判断 Map 中是否包含指定的键。
  • containsValue(Object value): 判断 Map 中是否包含指定的值。

5. HashMap、LinkedHashMap、TreeMap

  • HashMap: 基于哈希表实现,提供快速的检索性能,无固定顺序。
  • LinkedHashMap:HashMap 基础上,保持元素插入顺序。
  • TreeMap: 基于红黑树实现,按键有序存储。

6. Queue 接口

Queue 接口表示一种先进先出(FIFO)的数据结构,通常用于处理任务调度。主要方法包括 offer(E e)poll()peek()

7. Deque 接口

Deque 接口是 Queue 接口的扩展,表示一种双端队列。可以在两端插入和删除元素。主要方法包括 addFirst(E e)addLast(E e)removeFirst()removeLast()

ArrayList 类

当使用 ArrayList 类时,您可以执行许多常见的操作,例如添加、获取、修改、删除元素以及其他一些集合操作。以下是 ArrayList 类的详细使用说明:

1. 创建 ArrayList:

import java.util.ArrayList;

public class ArrayListUsage {
    public static void main(String[] args) {
        // 创建一个 ArrayList
        ArrayList<String> cityList = new ArrayList<>();
    }
}

2. 添加元素:

使用 add 方法向 ArrayList 中添加元素。

cityList.add("Beijing");
cityList.add("Shanghai");
cityList.add("Guangzhou");

3. 插入元素:

使用 add 方法的指定索引位置,将元素插入 ArrayList。

cityList.add(1, "Chengdu");

4. 获取元素:

使用 get 方法通过索引获取元素。

String city = cityList.get(0);

5. 修改元素:

使用 set 方法通过索引修改元素。

cityList.set(1, "Nanjing");

6. 删除元素:

使用 remove 方法通过元素值或索引删除元素。

cityList.remove("Guangzhou");
cityList.remove(0);

7. 查找元素:

使用 contains 方法判断 ArrayList 中是否包含某个元素。

boolean containsChengdu = cityList.contains("Chengdu");

8. 获取大小:

使用 size 方法获取 ArrayList 的大小。

int cityCount = cityList.size();

9. 遍历 ArrayList:

使用 for-each 循环遍历 ArrayList。

for (String city : cityList) {
    System.out.println(city);
}

完整示例:

import java.util.ArrayList;

public class ArrayListUsage {
    public static void main(String[] args) {
        // 创建一个 ArrayList
        ArrayList<String> cityList = new ArrayList<>();

        // 添加元素
        cityList.add("Beijing");
        cityList.add("Shanghai");
        cityList.add("Guangzhou");

        // 插入元素
        cityList.add(1, "Chengdu");

        // 获取元素和修改元素
        String firstCity = cityList.get(0);
        cityList.set(1, "Nanjing");

        // 删除元素
        cityList.remove("Guangzhou");
        cityList.remove(0);

        // 查找元素
        boolean containsChengdu = cityList.contains("Chengdu");

        // 获取大小
        int cityCount = cityList.size();

        // 遍历 ArrayList
        System.out.println("遍历城市列表:");
        for (String city : cityList) {
            System.out.println(city);
        }
    }
}

这个示例演示了如何使用 ArrayList 进行添加、获取、修改、删除元素以及其他一些集合操作。

set接口以及实现类

HashSet 类

明白了,以下是更简洁的介绍:

创建 HashSet:

Set<String> hashSet = new HashSet<>();

添加元素:

hashSet.add("Apple");
hashSet.add("Banana");
hashSet.add("Orange");

查找元素:

boolean containsBanana = hashSet.contains("Banana");

删除元素:

hashSet.remove("Orange");

获取大小:

int setSize = hashSet.size();

遍历 HashSet:

for (String fruit : hashSet) {
    System.out.println(fruit);
}

这些简单的代码片段展示了 HashSet 的基本操作,包括创建、添加、查找、删除、获取大小和遍历。

用Set 对象实现集合运算

1. 并集(Union):

Set<Integer> unionSet = new HashSet<>(set1);
unionSet.addAll(set2);

2. 交集(Intersection):

Set<Integer> intersectionSet = new HashSet<>(set1);
intersectionSet.retainAll(set2);

3. 差集(Difference):

Set<Integer> differenceSet = new HashSet<>(set1);
differenceSet.removeAll(set2);

判断是否为子集:

boolean isSubset = set1.containsAll(set2);

这行代码判断 set2 是否为 set1 的子集,如果是,则 isSubsettrue

TreeSet 类

创建 TreeSet:

Set<String> treeSet = new TreeSet<>();

添加元素:

treeSet.add("Apple");
treeSet.add("Banana");
treeSet.add("Orange");

查找第一个元素:

String firstElement = ((TreeSet<String>) treeSet).first();

删除元素:

treeSet.remove("Orange");

获取大小:

int treeSetSize = treeSet.size();

遍历 TreeSet:

for (String fruit : treeSet) {
    System.out.println(fruit);
}

这些简洁的代码片段展示了 TreeSet 的基本操作,包括创建、添加、查找、删除、获取大小和遍历。

对象顺序

在 Java 中,对象的顺序通常涉及到两个方面:插入顺序和排序顺序。

  1. 插入顺序(Insertion Order): 插入顺序指的是元素被添加到集合的顺序。例如,如果你按照顺序添加元素 A、B、C 到集合中,那么在遍历集合时,元素的顺序将是 A、B、C。

    示例:

    Set<String> insertionOrderSet = new HashSet<>();
    insertionOrderSet.add("Apple");
    insertionOrderSet.add("Banana");
    insertionOrderSet.add("Orange");
    
    for (String fruit : insertionOrderSet) {
        System.out.println(fruit);
    }
    

    输出可能是:

    Apple
    Banana
    Orange
    
  2. 排序顺序(Sorting Order): 排序顺序指的是元素按照一定的顺序排列。在有序的集合中,元素通常按照升序或降序排列。TreeSet 就是一个有序集合的例子,它使用红黑树数据结构来保持元素的顺序。

    示例:

    Set<String> sortingOrderSet = new TreeSet<>();
    sortingOrderSet.add("Apple");
    sortingOrderSet.add("Banana");
    sortingOrderSet.add("Orange");
    
    for (String fruit : sortingOrderSet) {
        System.out.println(fruit);
    }
    

    输出可能是:

    Apple
    Banana
    Orange
    

需要注意的是,有些集合类(如 HashSet)并不保证元素的排序,而有些集合类(如 TreeSet)则明确保持元素的排序。在选择集合类时,可以根据对顺序的需求来选择合适的实现。

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

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

相关文章

centos利用find提权反弹shell

需要说明的是利用find命令进行提权的方式已经不存在了&#xff0c;因为Linux默认不会为find命令授予suid权限&#xff0c;这里只是刻意的制造出了一种存在提权的环境 首先我们先介绍一下find命令&#xff0c;find命令主要用来在Linux中查找文件使用&#xff0c;它可以进行最基础…

Brute Force

Brute Force "Brute Force"&#xff08;暴力破解&#xff09;指的是一种通过尝试所有可能的组合来获取访问、解密或破解信息的攻击方法。这种攻击方法通常是基于暴力和不断尝试的&#xff0c;不依赖漏洞或弱点。通常用于破解密码、破坏系统或获取未经授权的访问权限…

如何在thingsboard的规则链中对一个遥测属性进行求平均值

背景 有这样一个需求,一个温度传感器每5秒,上传一次数据。要求算出该设备2分钟内的平均温度,如果超过某个值,则发送告警邮件。 具体操作实现 下面在规则链中实现求平均值。 使用的节点是 配置如下 必填 Timeseries keys,是要求的平均值的属性名。 我这里求的是四个…

AI大模型低成本快速定制秘诀:RAG和向量数据库

文章目录 1. 前言2. RAG和向量数据库3. 论坛日程4. 购票方式 1. 前言 当今人工智能领域&#xff0c;最受关注的毋庸置疑是大模型。然而&#xff0c;高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。 这种背景下&#xff0c;向量数据库凭借其独特…

【Python Opencv】Opencv画图形

文章目录 前言一、画图形1.1 画线1.2 画矩形1.3 画圆1.4 画椭圆1.5 添加文本 总结 前言 在计算机视觉和图像处理中&#xff0c;OpenCV不仅可以处理图像和视频&#xff0c;还提供了一组功能强大的工具&#xff0c;用于在图像上绘制各种形状和图形。这些功能使得我们能够在图像上…

arm2 day6

串口实现单个字符的收发 main.c uart4.c uart4.h

107.am40刷机折腾记3-firefly镜像的烧写

1. 平台&#xff1a; rk3399 am40 4g32g 2. 内核&#xff1a;firefly的内核&#xff08;整体镜像&#xff09; 3. 交叉编译工具 &#xff1a;暂时不编译 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff1a;boot-am40-20231113.img(自编译) 准备的情况&a…

数据库表的设计——范式

目录 1. 设计数据表需要注意的点 2. 范式 2.1 范式简介 2.2 范式有哪些&#xff1f; 2.3 第一范式(1NF) 2.4 第二范式(2NF) 2.5 第三范式(3NF) 2.6 小结 1. 设计数据表需要注意的点 &#xff08;1&#xff09;首先要考虑设计这张表的用途&#xff0c;这张表都要存放什…

Docker的安装配置与使用

1、docker安装与启动 首先你要保证虚拟机所在的盘要有至少20G的空间&#xff0c;因为docker开容器很吃空间的&#xff0c;其次是已经安装了yum依赖 yum install -y epel-release yum install docker-io # 安装docker配置文件 /etc/sysconfig/docker chkconfig docker on # 加…

数据库 并发控制

多用户数据库系统&#xff1a;允许多个用户同时使用同一个数据库的数据库系统 交叉并发方式&#xff1a;在单处理机系统中&#xff0c;事务的并行执行实际上是这些并行事务的并行操作轮流交叉运行 同时并发方式&#xff1a;在多处理机系统中&#xff0c;每个处理机可以运行一个…

手机厂商参与“百模大战”,vivo发布蓝心大模型

在2023 vivo开发者大会上&#xff0c;vivo发布自研通用大模型矩阵——蓝心大模型&#xff0c;其中包含十亿、百亿、千亿三个参数量级的5款自研大模型&#xff0c;其中&#xff0c;10亿量级模型是主要面向端侧场景打造的专业文本大模型&#xff0c;具备本地化的文本总结、摘要等…

PostgreSQL 机器学习插件 MADlib 安装与使用

MADlib 一个可以在数据库上运行的开源机器学习库&#xff0c;支持 PostgreSQL 和 Greenplum 等数据库&#xff1b;并提供了丰富的分析模型&#xff0c;包括回归分析&#xff0c;决策树&#xff0c;随机森林&#xff0c;贝叶斯分类&#xff0c;向量机&#xff0c;风险模型&#…

JVM如何运行,揭秘Java虚拟机运行时数据区

目录 一、概述 二、程序计数器 三、虚拟机栈 四、本地方法栈 五、本地方法接口 六、堆 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;堆空间细分 七、方法区 一、概述 不同的JVM对于内存的划分方式和管理机制存在部分差异&#xff0c;后续针对HotSpot虚…

【教学类-17-03】20231105《世界杯随机参考图七巧板 3份一页》(大班)

效果展示&#xff1a; 单页效果 多页效果 预设样式&#xff1a; 背景需求&#xff1a; 2022年11月24日&#xff0c;大1班随机抽取的9位幼儿制作了9张拼图&#xff0c;发现以下三个问题&#xff1a; 1、粉红色辅助纸选择量多——9份作业有4位幼儿的七巧板人物是粉红色的 2、…

【2021集创赛】Risc-v杯三等奖:基于E203 ShuffleNet的图像识别SoC

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位&#xff1a;中国科学技术大学 队伍名称&#xff1a;Supernova 总决赛奖项&#xff1a;三等奖 1.项目简介 本设计以E203处理器为核心&#xff0c;添加协处理器、神经网…

高频SQL50题(基础题)-5

文章目录 主要内容一.SQL练习题1.602-好友申请&#xff1a;谁有最多的好友代码如下&#xff08;示例&#xff09;: 2.585-2016年的投资代码如下&#xff08;示例&#xff09;: 3.185-部门工资前三高的所有员工代码如下&#xff08;示例&#xff09;: 4.1667-修复表中的名字代码…

设计模式之工厂模式 ( Factory Pattern )(1)

其他设计模式也会后续更新… 设计模式其实需要有一定开发经验才好理解&#xff0c;对代码有一定的设计要求&#xff0c;工作中融入才是最好的 工厂模式 ( Factory Pattern ) 工厂模式&#xff08;Factory Pattern&#xff09;提供了一种创建对象的最佳方式 工厂模式在创建对…

工业控制(ICS)学习笔记

目标&#xff1a;工业互联网安全的比赛 工控CTF之协议分析1——Modbus_ctf modbus-CSDN博客 常见的工控协议有&#xff1a;Modbus、MMS、IEC60870、MQTT、CoAP、COTP、IEC104、IEC61850、S7comm、OMRON等 不用看了&#xff0c;没太多技术含量&#xff0c;做了一会发现全得看答案…

【工程实践】Docker使用记录

前言 服务上线经常需要将服务搬到指定的服务器上&#xff0c;经常需要用到docker&#xff0c;记录工作中使用过dcoker指令。 1.写Dockerfile 1.1 全新镜像 FROM nvidia/cuda:11.7.1-devel-ubuntu22.04ENV WORKDIR/data/Qwen-14B-Chat WORKDIR $WORKDIR ADD . $WORKDIR/RUN ap…

Python 邮件发送(163为例)

代码 import smtplib import socket from email.mime.text import MIMEText from email.header import Headerdef send_mail():# 设置发件人、收件人、主题、内容from_address 18847097110163.comto_address 963268595qq.comsubject test emailbody hahahhahaha# SMTP邮件…