【面试干货】Java集合类详解:List、Set、Queue、Map、Stack的特点与用法

【面试干货】Java集合类详解:List、Set、Queue、Map、Stack的特点与用法

  • 1、Map
    • 1.1 特点
    • 1.2 用法
    • 1.3 常见的实现类
  • 2、Set
    • 2.1 特点
    • 2.2 用法
    • 2.3 常见的实现类
  • 3、List
    • 3.1 特点
    • 3.2 用法
    • 3.3 常见的实现类
  • 4、Queue
    • 4.1 特点
    • 4.2 用法
    • 4.3 常见的实现类
  • 5、Stack
    • 5.1 特点
    • 5.2 用法(但不建议直接使用Stack类)
  • 6、用法总结建议


💖The Begin💖点点关注,收藏不迷路💖

在Java中,集合类(Collections Framework)是一个非常重要的部分,它提供了多种数据结构的实现,以便我们在开发中更方便地管理和操作数据。

本文将详细介绍Java中的几种主要集合类:List、Set、Queue、Map和Stack的特点和用法。

1、Map

Map是一个键值对集合,键(Key)唯一不能重复,一个键对应一个值(Value),值可以重复。

在Map中,可以通过KeySet()方法将所有的键抽取成一个Set集合,这样就可以方便地遍历所有的键;而Values()方法则可以将Map中所有的值抽取成一个集合,同样便于对值进行遍历操作。

1.1 特点

1、键(Key)唯一不能重复。

2、可以将Key和Value单独抽取出来,例如keySet()和values()方法。

3、TreeMap可以保证顺序,HashMap不保证顺序。

1.2 用法

Map<String, Integer> map = new HashMap<>();  
	map.put("One", 1);  
	map.put("Two", 2);  
System.out.println(map.get("One")); // 输出 1

1.3 常见的实现类

1、HashMap:基于哈希表实现,不保证顺序。

2、LinkedHashMap:基于链表和哈希表实现,维护插入顺序。

3、TreeMap:基于红黑树实现,保证键的自然顺序或自定义排序。

Map<String, Integer> hashMap = new HashMap<>();
         hashMap.put("a", 1);
         hashMap.put("b", 2);

Map<String, Integer> treeMap = new TreeMap<>();
        treeMap.put("c", 3);
        treeMap.put("d", 4);

 Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("e", 5);
        linkedHashMap.put("f", 6);
        linkedHashMap.put("g", 7);

2、Set

Set是一个不包含重复元素的集合。

2.1 特点

1、元素唯一不重复。

2、Set中最多包含一个null元素。

3、只能使用Iterator实现单项遍历。

4、Set 中没有同步方法。

2.2 用法

Set<String> set = new HashSet<>();  
	set.add("Apple");  
	set.add("Banana");  
	set.add("Apple"); // 不会添加重复元素  
for (String fruit : set) {  
    System.out.println(fruit);  
}

2.3 常见的实现类

1、HashSet:基于哈希表实现,不保证顺序。

2、LinkedHashSet:基于链表和哈希表实现,维护插入顺序。

3、TreeSet:基于红黑树实现,保证元素的自然顺序或自定义排序。

用法示例:

Set<String> hashSet = new HashSet<>();
	hashSet.add("one");
	hashSet.add("two");

Set<String> treeSet = new TreeSet<>();
	treeSet.add("three");
	treeSet.add("four");


Set<String> linkedHashSet = new LinkedHashSet<>();
     linkedHashSet.add("five");
     linkedHashSet.add("six");
     linkedHashSet.add("seven");

3、List

List是一个有序的可重复集合。

3.1 特点

1、元素有序。
2、元素可重复。
3、可以在任意位置增加、删除元素。
4、List可以使用Iterator进行单向遍历,也可以使用ListIterator进行双向遍历。

遍历示例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorExample {
    public static void main(String[] args) {
        // 创建一个列表并添加一些元素
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");

        // 使用 Iterator 进行单向遍历
        System.out.println("使用 Iterator 遍历列表:");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.print(element + " ");
        }
        System.out.println();

        // 使用 ListIterator 进行双向遍历
        System.out.println("\n使用 ListIterator 进行双向遍历:");
        ListIterator<String> listIterator = list.listIterator();

        // 向前遍历列表
        System.out.println("向前遍历:");
        while (listIterator.hasNext()) {
            String element = listIterator.next();
            System.out.print(element + " ");
        }
        System.out.println();

        // 向后遍历列表
        System.out.println("向后遍历:");
        while (listIterator.hasPrevious()) {
            String element = listIterator.previous();
            System.out.print(element + " ");
        }
        System.out.println();
    }
}

在这里插入图片描述

3.2 用法

List<String> list = new ArrayList<>();  
	list.add("First");  
	list.add("Second");  
	list.add(1, "Inserted"); // 在索引1处插入元素  
System.out.println(list.get(1)); // 输出 Inserted

3.3 常见的实现类

1、ArrayList:基于动态数组,支持快速随机访问。

2、LinkedList:基于双向链表,适合需要频繁插入和删除元素的场景。

用法示例:

List<Integer> arrayList = new ArrayList<>();
	arrayList.add(1);
	arrayList.add(2);

List<Integer> linkedList = new LinkedList<>();
	linkedList.add(3);
	linkedList.add(4);

4、Queue

Queue是一个遵循先进先出(FIFO)原则的集合。

4.1 特点

1、遵循FIFO原则。

2、使用offer()添加元素,poll()移除元素,可以通过返回值判断操作是否成功。

3、通常不允许插入null元素。

4.2 用法

Queue<String> queue = new LinkedList<>();  
	queue.offer("First");  
	queue.offer("Second");  
System.out.println(queue.poll()); // 输出 First

4.3 常见的实现类

1、LinkedList:可以作为队列使用,支持双端队列。

2、PriorityQueue:基于优先级堆实现,元素按优先级顺序出队。

Queue<Integer> linkedList= new LinkedList<>();
	queue.offer(1);
	queue.offer(2);
Integer head = linkedList.poll();

Queue<Integer> priorityQueue = new PriorityQueue<>();

 // 添加元素到优先级队列
  priorityQueue.offer(5);
  priorityQueue.offer(1);
  priorityQueue.offer(3);
  
// 获取并移除队列头部的元素
Integer head = priorityQueue.poll();

5、Stack

Stack是一个遵循后进先出(LIFO)原则的集合。

5.1 特点

1、遵循LIFO原则。

2、提供了push()、pop()、peek()等方法。

3、Stack继承自Vector,但通常不建议直接使用Stack,因为Vector是同步的,而Stack的方法并不是线程安全的。

5.2 用法(但不建议直接使用Stack类)

Deque<String> stack = new ArrayDeque<>(); // 使用Deque实现Stack的功能  
	stack.push("First");  
	stack.push("Second");  
System.out.println(stack.pop()); // 输出 Second

尽管Stack类存在,但在实际开发中,建议使用Deque接口及其实现类(如ArrayDeque)来代替,因为Deque提供了更丰富的功能和更好的性能。

6、用法总结建议

1、如果涉及堆栈或队列操作,建议使用List或Deque。

2、对于快速插入和删除元素,建议使用LinkedList。

3、如果需要快速随机访问元素,建议使用ArrayList。

但实际上:如果涉及堆栈,队列等操作,对于Stack和Queue,应该使用专门为此设计的集合类(如Deque和Queue接口的实现类),因为它们提供了更适合这些数据结构操作的方法。

对于快速插入和删除元素的场景,LinkedList是一个很好的选择,因为它在列表的任意位置插入和删除元素的时间复杂度都是O(1)。

如果需要快速随机访问元素,则应该使用ArrayList,因为ArrayList是基于数组实现的,可以通过索引快速访问元素。
在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

Springboot实现微信小程序登录功能

目录 一 什么是微信登录功能 二 实现微信登录功能的整体逻辑 三 微信登录功能实现步骤 一 什么是微信登录功能 微信小程序登录功能一般用于开发微信小程序的时候&#xff0c;我们需要使用微信授权登录我们的微信小程序&#xff0c;本篇博客就微信小程序实现微信授权登录以及s…

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[2]-简洁部署版

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[2]-简洁部署版 1.环境要求 1.1 软件要求 要顺利运行本代码,请按照以下系统要求进行配置 已经测试过的系统 Linux Ubuntu 22.04.5 kernel version 6.7其他系统可能出现系统兼容性问题。 最低要求 该要求仅针对标准模…

OpenStack入门体验及一键部署

OpenStack入门体验 技能目标&#xff1a; 了解云计算概念 了解OpenStack 了解OpenStack的构成 会OpenStack单机环境一键部署 从控制台认识OpenStack各项功能会 通过OpenStack控制台创建云主机 什么是云计算 云计算(cloudcomputing)是一种基于网络的超级计算模式&a…

Docker安装Nginx(各种错误版)

Docker安装-CSDN博客 安装启动Docker之后 docker run -d -p 81:81 --name nginx nginx 这样没有指定版本 docker run&#xff1a;启动一个新的容器。-d&#xff1a;以分离模式运行容器&#xff08;后台运行&#xff09;。-p 81:81&#xff1a;将主机的 81 端口映射到容器的 …

用Vue3和p5.js打造一个交互式数据可视化仪表盘

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Vue.js 集成 p5.js 实现交互式波形图 应用场景介绍 在数据可视化领域&#xff0c;波形图广泛应用于展示动态变化的数据&#xff0c;如声音信号、心跳曲线等。通过动态绘制波形图&#xff0c;用户可以直观…

网络标准架构--OSI七层、四层

OSI七层网络架构&#xff0c;以及实际使用的四层网络架构。

细说ARM MCU的串口发送数据的实现过程

目录 1、条件及工程配置 2、实现串口发送的库函数 3、修改whlie(1)中的代码 4、修改回调函数 5、下载运行 前面的文章介绍了用串口的接收中断来接收数据&#xff0c;本文介绍通过串口从MCU向外发送数据。 1、条件及工程配置 文章依赖的硬件及工程配置同本文作者的其他文…

热门开源项目推荐:智谱GLM-4-9B和ChatGLM3-6B

目录 热门开源项目推荐&#xff1a;智谱GLM-4-9B和ChatGLM3-6B 1.引言 1.1 开源文化简介 1.2 开源项目的重要性 1.3 博客目的和读者价值 2.什么是开源项目&#xff1f; 2.1 开源定义 2.2 开源许可证类型 2.3 开源社区的作用 3.为什么程序员应该关注开源项目&#xff…

javaWeb项目-ssm+jsp学生请假系统功能介绍

本项目源码:java-ssm-jsp学生请假系统源码说明文档资料资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL…

HashMap底层源码分析

目录 一、知识点二、数据结构三、resize() 扩容方法四、putVal() 添加数据方法五、remove() 删除方法六、removeTreeNode() 退化链表方法 一、知识点 加载因子: HashMap 的默认的加载因子: 0.75&#xff0c;用来限定阈值&#xff08;用于控制 HashMap 的饱和度&#xff09; 阈值…

适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目

一、源码特点 java Web智慧食堂管理系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 bootstra…

uni-app 小程序:显示图片并且点击图片展示大图

效果如图所示&#xff1a; 在页面显示一张图片&#xff0c;然后点击该张图片后显示大图。点击大图就可以关闭大图。 实现的主要代码如下&#xff1a; <image :src"imgpath" mode"aspectFill" click"imgPreview(imgArr)"></image> 其…

LeetCode | 171.Excel表列序号

这道题涉及到字符串和进制转换&#xff0c;首先我们先创建一个A-Z到1-26的map映射&#xff0c;方便我们后续遍历字符串转换&#xff0c;然后对字符串从后往前遍历&#xff0c;依次加上对应权重&#xff0c;注意越往前的权重越大&#xff0c;要记得对应乘上26的对应方数 class …

Visual Studio Code 的安装教程和配置C语言环境插件推荐

目录 1.vscode简介2.下载安装vs code3.VSCode基础配置VSCode界面简介VSCode设置中文界面VSCode个性化设置VSCode常用设置基本编辑快捷键VSCode常用快捷键 4.下载安装MinGW5.设置vscode里的环境6.插件推荐7.vscode官方文档 1.vscode简介 VSCode是微软出的一款轻量级编辑器&…

Xilinx SDK操作步骤详细介绍

在vivado设计完成后&#xff0c;下一步就是软件设计&#xff0c;与vivado相配套的设计软件是xilinx SDK(software developement kit&#xff09;&#xff0c;其操作流程如下&#xff1a; Vivado软件的bitstream文件成功生成后&#xff0c;点击File——Export——Export Hardwa…

IQ Products—Hemoglobin antibodies for flow cytometry

血红蛋白&#xff08;Hemoglobin&#xff09;英文缩写为HGB或Hb。血红蛋白是红细胞内运输氧的特殊蛋白质&#xff0c;是使血液呈红色的蛋白&#xff0c;由珠蛋白和血红素组成&#xff0c;其珠蛋白部分是由两对不同的珠蛋白链&#xff08;α链和β链&#xff09;组成的四聚体。血…

异或运算在面试题中的应用

异或运算 是 涉及到数据位运算时常见的处理方式。如何进行异或运算&#xff1f;在对应位上&#xff0c;相同为0&#xff0c;不同1&#xff0c;但其实两个数据异或运算就是进行无进位加法。 例如&#xff1a; int a 7, b 6, a ^b ? 算法1: 相同为0&#xff0c;不同为1 a …

边界内聚和耦合

内聚 功能内聚 功能内聚是软件工程中一个重要的概念&#xff0c;它描述了一个模块内部各个元素之间的紧密程度。一个具有高功能内聚的模块意味着其内部的各个组件都共同完成一个具体的、明确的功能&#xff0c;并且这些组件之间的联系不是偶然的&#xff0c;而是因为它们共同服…

sslscan一键检测服务器协议信息和加密算法(KALI工具系列二十四)

目录 1、KALI LINUX 简介 2、sslscan工具简介 3、信息收集 3.1 目标主机IP&#xff08;服务器&#xff09; 3.2 KALI的IP 4、操作示例 4.1 扫描主机 4.2 指定端口 4.3 输出详细信息 4.4 打印输出信息 4.4 检测协议 5、总结 1、KALI LINUX 简介 Kali Linux 是一个…

在下游市场需求带动下 我国聚天门冬氨酸脂防腐涂料市场规模不断扩大

在下游市场需求带动下 我国聚天门冬氨酸脂防腐涂料市场规模不断扩大 聚天门冬氨酸酯防腐涂料又称为天冬聚脲防腐涂料&#xff0c;是以聚天门冬氨酸酯作为主体树脂、脂肪族异氰酸酯为固化剂而形成的一种防腐涂料。与其他类型的防腐涂料相比&#xff0c;聚天门冬氨酸酯防腐涂料具…