Java集合框架中的List、Map、Set详解

news2025/5/10 18:14:53

在Java开发中,集合框架是处理数据时不可或缺的工具之一。今天,我们来深入了解一下Java集合框架中的ListMapSet,并探讨它们的常见方法操作。

目录

一、List集合

1.1 List集合介绍

1.2 List集合的常见方法

添加元素

获取元素

修改元素

删除元素

元素排序

1.3 List的不同实现类

二、Map集合

2.1 Map集合介绍

2.2 Map集合的常见方法

添加键值对

获取值

检查键或值是否存在

删除键值对

2.3 Map的不同实现类

三、Set集合

3.1 Set集合介绍

3.2 Set集合的常见方法

添加元素

检查元素是否存在

移除元素

3.3 Set的不同实现类

总结


一、List集合

1.1 List集合介绍

List是Java集合框架中的一个接口,它是一个有序的集合,允许存储重复的元素。List中的元素可以通过索引进行访问,这使得它在需要频繁访问元素的场景中非常有用。常见的List实现类有ArrayListLinkedList

1.2 List集合的常见方法

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

  • add(int index, E element):在指定位置插入元素。

import java.util.ArrayList;
import java.util.List;

public class ListAddExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple"); // 添加到末尾
        list.add(0, "Banana"); // 在索引0处插入
        System.out.println("List: " + list);
    }
}
获取元素
  • get(int index):返回列表中指定位置的元素。

  • indexOf(Object o):返回首次出现的指定元素的索引;如果未找到,则返回-1。

  • lastIndexOf(Object o):返回最后一次出现的指定元素的索引;如果未找到,则返回-1。

import java.util.ArrayList;
import java.util.List;

public class ListGetExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        String fruit = list.get(1); // 获取索引1处的元素
        System.out.println("Element at index 1: " + fruit);

        int index = list.indexOf("Orange"); // 查找"Orange"的索引
        System.out.println("Index of 'Orange': " + index);

        int lastIndex = list.lastIndexOf("Banana"); // 查找最后一个"Banana"的索引
        System.out.println("Last index of 'Banana': " + lastIndex);
    }
}
修改元素
  • set(int index, E element):用指定元素替换列表中指定位置的元素,并返回被替换的元素。

import java.util.ArrayList;
import java.util.List;

public class ListSetExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        String oldFruit = list.set(1, "Grape"); // 修改索引1处的元素
        System.out.println("Replaced element: " + oldFruit);
        System.out.println("Updated list: " + list);
    }
}
删除元素
  • remove(int index):删除指定位置的元素。

  • remove(Object o):删除首次出现的指定元素。

import java.util.ArrayList;
import java.util.List;

public class ListRemoveExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        list.remove(1); // 删除索引1处的元素
        list.remove("Orange"); // 删除"Orange"
        System.out.println("Updated list: " + list);
    }
}
元素排序

从Java 8开始,List接口提供了sort()方法,可以直接对列表进行排序。

import java.util.ArrayList;
import java.util.List;

public class ListSortMethodExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(1);
        list.add(4);
        list.add(2);

        list.sort((o1, o2) -> o1.compareTo(o2)); // 升序排序
        System.out.println("Sorted list: " + list);
    }
}

1.3 List的不同实现类

实现类特点
ArrayList基于动态数组实现,支持快速随机访问,适合频繁读取操作,但插入和删除效率较低
LinkedList基于双向链表实现,适合频繁插入和删除操作,但随机访问效率较低

二、Map集合

2.1 Map集合介绍

Map是Java集合框架中的一个接口,用于存储键值对(key-value)形式的数据。在Map中,键(key)必须是唯一的,而值(value)可以重复。常见的Map实现类有HashMapTreeMapHashTable

2.2 Map集合的常见方法

添加键值对
  • put(K key, V value):向Map中添加键值对。

import java.util.HashMap;
import java.util.Map;

public class MapPutExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);
        System.out.println("Map: " + map);
    }
}
获取值
  • get(Object key):根据键获取对应的值。

import java.util.HashMap;
import java.util.Map;

public class MapGetExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);

        Integer value = map.get("Apple"); // 获取键为"Apple"的值
        System.out.println("Value for 'Apple': " + value);
    }
}
检查键或值是否存在
  • containsKey(Object key):判断Map中是否包含指定的键。

  • containsValue(Object value):判断Map中是否包含指定的值。

import java.util.HashMap;
import java.util.Map;

public class MapContainsExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);

        boolean hasKey = map.containsKey("Apple"); // 检查键"Apple"
        boolean hasValue = map.containsValue(2); // 检查值2
        System.out.println("Contains key 'Apple': " + hasKey);
        System.out.println("Contains value 2: " + hasValue);
    }
}
删除键值对
  • remove(Object key):根据键删除对应的键值对。

import java.util.HashMap;
import java.util.Map;

public class MapRemoveExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);

        map.remove("Apple"); // 删除键为"Apple"的键值对
        System.out.println("Updated map: " + map);
    }
}

2.3 Map的不同实现类

实现类特点
HashMap基于哈希表实现,允许null键和null值,线程不安全,性能高
TreeMap基于红黑树实现,按键的自然顺序或自定义顺序排序,不允许null
LinkedHashMap维护插入顺序,性能与HashMap接近,线程不安全
HashTable线程安全,不允许null键或null值,性能较低

三、Set集合

3.1 Set集合介绍

Set是Java集合框架中的一个接口,它不允许存储重复元素。Set中的元素通常没有固定的存储顺序,但某些实现类(如TreeSet)可以保持有序。常见的Set实现类有HashSetLinkedHashSetTreeSet

3.2 Set集合的常见方法

添加元素
  • add(E e):向集合中添加一个元素,如果元素已存在,则返回false

import java.util.HashSet;
import java.util.Set;

public class SetAddExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        boolean added1 = set.add("Apple"); // 添加元素
        boolean added2 = set.add("Banana");
        boolean added3 = set.add("Apple"); // 尝试添加重复元素

        System.out.println("Added 'Apple': " + added1);
        System.out.println("Added 'Banana': " + added2);
        System.out.println("Added 'Apple' again: " + added3);
        System.out.println("Set content: " + set);
    }
}
检查元素是否存在
  • contains(Object o):检查集合中是否包含指定元素。

import java.util.HashSet;
import java.util.Set;

public class SetContainsExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");

        boolean containsApple = set.contains("Apple"); // 检查是否包含"Apple"
        boolean containsOrange = set.contains("Orange"); // 检查是否包含"Orange"

        System.out.println("Contains 'Apple': " + containsApple);
        System.out.println("Contains 'Orange': " + containsOrange);
    }
}
移除元素
  • remove(Object o):从集合中移除指定元素。

import java.util.HashSet;
import java.util.Set;

public class SetRemoveExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");

        boolean removed = set.remove("Apple"); // 移除"Apple"
        System.out.println("Removed 'Apple': " + removed);
        System.out.println("Set content after removal: " + set);
    }
}

3.3 Set的不同实现类

实现类特点
HashSet基于哈希表实现,无序,允许null值,线程不安全
LinkedHashSet维护插入顺序,性能与HashSet接近,线程不安全
TreeSet基于红黑树实现,按键的自然顺序或自定义顺序排序,不允许null

总结

  • List是一个有序的集合,允许重复元素,适合需要频繁访问元素的场景。

  • Map是一个键值对集合,键唯一,值可以重复,适合需要通过键快速查找值的场景。

  • Set是一个不允许重复元素的集合,适合需要存储唯一元素的场景。

通过掌握这些集合的特点和常见方法,我们可以根据具体需求选择合适的集合类型,从而更高效地处理数据。希望这篇文章对你有所帮助!

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

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

相关文章

OpenStack Yoga版安装笔记(23)Swift安装

一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验&#xff0c;已经有controller, compute1, block1节点&#xff0c;并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…

MRO 工业品电商系统:智能精准匹配,快速满足采购需求

在竞争激烈的工业领域&#xff0c;企业对 MRO 工业品的采购需求越来越多。但传统 MRO 采购存在信息不透明、客户选型困难&#xff0c;流程复杂处理周期长、库存信息不明确、成本高和客户价格管理混乱等诸多问题。随着电商发展&#xff0c;MRO 工业品电商系统出现&#xff0c;给…

2025年Q1数据安全政策、规范、标准以及报告汇总共92份(附下载)

一、政策演进趋势分析 &#xff08;一&#xff09;国家级政策新动向 数据要素市场建设 数据流通安全治理方案&#xff08;重点解析数据确权与交易规则&#xff09; 公共数据授权运营规范&#xff08;创新性提出分级授权机制&#xff09; 新兴技术安全规范 人工智能安全标准…

基于Python Django 的全国房价大数据可视化系统(附源码,部署)

博主介绍&#xff1a;✌程序员徐师兄&#xff0c;7年大厂开发经验。全网粉丝12w&#xff0c;CSDN博客专家&#xff0c;同时活跃在掘金、华为云、阿里云、InfoQ等平台&#xff0c;专注Java技术和毕业项目实战分享✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&a…

项目班——0408——qt的多线程开发

目录 一、并发、并行的概念 1. 并发 例子 2. 并行 二、qt的多线程开发 三、Qt多线程开发方法 1、可以使用QTthread 创建线程 来执行线程函数 2、可以借助moveToThread将对象转移到另一个线程中&#xff0c;然后执行 一、并发、并行的概念 1. 并发 多个任务在同一时间…

每天学一个 Linux 命令(25):more

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/25/index.html 每天学一个 Linux 命令(25):more 命令简介 more 是一个经典的分页显示文本文件内容的命令行工具,适用于逐页浏览长文本文件。它简单易用,适合快速查看内容,但功能比 less 更为基础(不支持向后翻…

如何0基础学stm32?

如何0基础学stm32&#xff1f; 作为一个混迹嵌入式领域十余年的老兵&#xff0c;每次看到"0基础学STM32"这样的提问&#xff0c;我都忍不住想笑&#xff0c;又有些无奈。这就像问"如何0基础学开飞机"一样—虽然理论上可行&#xff0c;但过程恐怕没那么愉快…

无需训练的具身导航探索!TRAVEL:零样本视觉语言导航中的检索与对齐

作者&#xff1a; Navid Rajabi, Jana Kosecka 单位&#xff1a;乔治梅森大学计算机科学系 论文标题&#xff1a;TRAVEL: Training-Free Retrieval and Alignment for Vision-and-Language Navigation 论文链接&#xff1a;https://arxiv.org/pdf/2502.07306 主要贡献 提出…

C#测试linq中的左连接的基本用法

使用linq联表或者连接两个对象集合查询时一般使用的是join关键字&#xff0c;返回结果中包含两个表或两个对象集合中连接字段相等的数据记录&#xff0c;如果要实现sql语句中的左连接效果&#xff0c;并没有现成的left join关键字&#xff0c;此时可以使用DefaultIfEmpty 实现左…

2025-04-19 Python 强类型编程

文章目录 1 方法标注1.1 参数与返回值1.2 变参类型1.3 函数类型 2 数据类型2.1 内置类型2.2 复杂数据结构2.3 类别选择2.4 泛型 3 标注方式3.1 注释标注3.2 文件标注 4 特殊情形4.1 前置引用4.2 函数标注扩展4.3 协变与逆变4.4 dataclass 5 高级内容5.1 接口5.2 泛型的协变/逆变…

spring-batch批处理框架(2)

文章目录 八、作业控制8.1 作业启动8.1.1 SpringBoot 启动8.1.2 Spring 单元测试启动8.1.3 RESTful API 启动 8.2 作业停止方案1&#xff1a;Step 步骤监听器方式方案2&#xff1a;StepExecution停止标记 8.3 作业重启8.3.1 禁止重启8.3.2 限制重启次数8.3.3 无限重启 九、Item…

动态规划算法的欢乐密码(一):斐波那契数模型

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、动态规划 二、例题讲解 2.1. 第 N 个泰波那契数 2.2. 三步问题 2.3. 使用最小花费爬楼梯 2.4. 解码方法 一、动态规划 动态规划是一种将复杂问题分解为更小的子问题&#xff0c;并利用子问题的解来…

Echarts柱状图斜线环纹(图形的贴花图案)

单独设置 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cbar-stack&codePYBwLglsB2AEC8sDeAoWszGAG0iAXMmuhgE4QDmFApqYQOQCGAHhAM70A0x6L7ACsAjQwtQqhIkwATxDUGbABaMAJsADu9HrAC-xHd3TZqNaCvEHiFcuaKTjAMzAMAzAFIu28hUXPY9ABYPQxIAI2AwTABbV…

2025.04.19【Spider】| 蜘蛛图绘制技巧精解

Basic multi-group radar chart Start with a basic version, learn how to format your input dataset Radar chart with ggradar A Spider chart made using the ggradar package and a lot of customization.A work by Tuo Wang 文章目录 Basic multi-group radar chartRa…

【Linux】深入理解Linux文件系统:从C接口到内核设计哲学

文章目录 前言一、C语言中的文件接口1. 文件指针&#xff08;句柄&#xff09;FILE*以写方式打开文件&#xff0c;若文件不存在会新建一个文件W写入方式&#xff0c;在打开文件之前都会将文件内容全部清空追加写方式&#xff0c;其用法与写方法一致&#xff0c;不同在于a方法可…

基于尚硅谷FreeRTOS视频笔记——15—系统配制文件说明与数据规范

目录 配置函数 INCLUDE函数 config函数 数据类型 命名规范 函数与宏 配置函数 官网上可以查找 最核心的就是 config和INCLUDE INCLUDE函数 这些就是裁剪的函数 它们使用一个ifndef。如果定义了&#xff0c;就如果定义了这个宏定义&#xff0c;那么代码就生效。 通过ifn…

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

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

c# MES生产进度看板,报警看板 热流道行业可用实时看生产进度

MES生产进度看板&#xff0c;报警看板 热流道行业可用实时看生产进度 背景 本软件是给宁波热流道行业客户开发的生产电子看板软件系统 功能 1.录入工艺流程图&#xff08;途程图&#xff09;由多个站别组成。可以手动设置每个工艺站点完成百分比。 2.可以看生成到哪个工…

初识Redis · C++客户端string

目录 前言&#xff1a; string的API使用 set get&#xff1a; expire: NX XX: mset,mget&#xff1a; getrange setrange: incr decr 前言&#xff1a; 在前文&#xff0c;我们已经学习了Redis的定制化客户端怎么来的&#xff0c;以及如何配置好Redis定制化客户端&…

华硕原厂系统枪神9/9p超竟版-WIN11原装开箱出厂系统安装

华硕原厂系统枪神9/9p超竟版-WIN11-24H2-专业工作站版本安装可带F12-ASUSRecovery恢复功能 适用机型&#xff1a; G635LX、G635LW、G835LX、G835LW、G615LW、G615LP、G615LM、G615LH G815LW、G815LP、G815LM、G815LH、G635LR、G835LR、G615LR、G815LR 远程恢复安装&#xff…