Java-集合框架-List,Set,Map,队列
文章目录
- Java集合框架:List,Set,Map,队列
- Java集合框架是什么?
- 如何使用?
- List
- Set
- Map
- 队列
- 什么场景使用?
- 优缺点是什么?
- List
- Set
- Map
- 队列
- Java示例
- List示例
- Set示例
- Map示例
- 队列示例
- 对比
Java集合框架:List,Set,Map,队列
Java集合框架是什么?
Java集合框架是一组用于存储和操作数据的类和接口。它提供了不同类型的集合,如List,Set,Map和队列,以满足不同的需求。
- List:有序的集合,允许重复的元素。
- Set:无序的集合,不允许重复的元素。
- Map:键值对的集合,每个元素都包含一个键和一个值。
- 队列:先进先出(FIFO)的集合,用于处理按顺序排列的元素。
如何使用?
List
List接口的常用实现类有ArrayList和LinkedList。可以使用以下步骤使用List集合:
- 导入List类和实现类的包:
import java.util.List;和import java.util.ArrayList; - 创建List对象:
List<String> list = new ArrayList<>(); - 添加元素:
list.add("元素1"); - 访问元素:
String element = list.get(0); - 遍历集合:使用for循环或者迭代器遍历集合。
Set
Set接口的常用实现类有HashSet和TreeSet。可以使用以下步骤使用Set集合:
- 导入Set类和实现类的包:
import java.util.Set;和import java.util.HashSet; - 创建Set对象:
Set<String> set = new HashSet<>(); - 添加元素:
set.add("元素1"); - 判断元素是否存在:
boolean contains = set.contains("元素1"); - 遍历集合:使用for-each循环遍历集合。
Map
Map接口的常用实现类有HashMap和TreeMap。可以使用以下步骤使用Map集合:
- 导入Map类和实现类的包:
import java.util.Map;和import java.util.HashMap; - 创建Map对象:
Map<String, Integer> map = new HashMap<>(); - 添加键值对:
map.put("键1", 1); - 获取值:
int value = map.get("键1"); - 遍历集合:使用for-each循环遍历键或值。
队列
队列接口的常用实现类有LinkedList和PriorityQueue。可以使用以下步骤使用队列:
- 导入队列类和实现类的包:
import java.util.Queue;和import java.util.LinkedList; - 创建队列对象:
Queue<String> queue = new LinkedList<>(); - 添加元素:
queue.add("元素1"); - 获取并删除队列头部的元素:
String element = queue.poll(); - 遍历队列:使用迭代器遍历队列。
什么场景使用?
- List:适用于需要按照元素的插入顺序进行操作的场景,可以包含重复的元素。
- Set:适用于需要保持唯一性的元素集合,不允许重复的元素。
- Map:适用于需要通过键值对进行操作的场景,每个键都是唯一的。
- 队列:适用于需要按照先进先出顺序处理元素的场景。
优缺点是什么?
List
优点:
- 可以按照插入顺序访问元素。
- 可以包含重复的元素。
缺点:
- 在大型数据集合中查找元素的效率较低。
Set
优点:
- 元素不重复,保持唯一性。
- 查找元素的效率较高。
缺点:
- 无序,不能按照插入顺序访问元素。
Map
优点:
- 可以通过键值对进行操作,便于查找和修改元素。
- 键是唯一的,保持唯一性。
缺点:
- 无序,不能按照插入顺序访问元素。
队列
优点:
- 按照先进先出的顺序处理元素。
缺点:
- 无法在中间插入或删除元素。
Java示例
List示例
import java.util.List;
import java.util.ArrayList;public class ListExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("元素1");list.add("元素2");list.add("元素3");for (String element : list) {System.out.println(element);}}
}
Set示例
import java.util.Set;
import java.util.HashSet;public class SetExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("元素1");set.add("元素2");set.add("元素3");for (String element : set) {System.out.println(element);}}
}
Map示例
import java.util.Map;
import java.util.HashMap;public class MapExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("键1", 1);map.put("键2", 2);map.put("键3", 3);for (String key : map.keySet()) {int value = map.get(key);System.out.println(key + ": " + value);}}
}
队列示例
import java.util.Queue;
import java.util.LinkedList;public class QueueExample {public static void main(String[] args) {Queue<String> queue = new LinkedList<>();queue.add("元素1");queue.add("元素2");queue.add("元素3");while (!queue.isEmpty()) {String element = queue.poll();System.out.println(element);}}
}
以上示例分别展示了List,Set,Map和队列的基本用法。根据具体需求选择合适的集合类型,以提高代码的效率和可读性。
对比
| 维度 | List | Set | Map | 队列 |
|---|---|---|---|---|
| 实现类 | ArrayList、LinkedList、Vector等 | HashSet、LinkedHashSet、TreeSet等 | HashMap、LinkedHashMap、TreeMap等 | LinkedList、PriorityQueue等 |
| 元素 | 有序的、可重复的 | 无序的、不可重复的 | 以键值对的形式存储、键不可重复、值可重复的数据结构 | 先进先出的数据结构、支持插入、删除、查找等操作 |
| 存储 | 按索引顺序存储 | 无序存储 | 以键值对的形式存储 | 按插入顺序存储 |
| 访问 | 可以通过索引值对列表进行访问和修改 | 不能直接访问、可以通过迭代器进行访问 | 可以通过键值对进行访问和修改 | 可以通过队列头和队列尾进行访问和修改 |
| 性能 | 读取速度快,添加和删除速度较慢 | 添加和删除速度快,读取速度较慢 | 读取速度快,添加和删除速度较慢 | 添加和删除速度快,读取速度较慢 |
| 应用 | 适用于需要按索引顺序访问的情况 | 适用于需要去重的情况 | 适用于需要以键值对形式存储数据的情况 | 适用于先进先出的数据操作的情况 |
相关文章:
Java-集合框架-List,Set,Map,队列
文章目录 Java集合框架:List,Set,Map,队列Java集合框架是什么?如何使用?ListSetMap队列 什么场景使用?优缺点是什么?ListSetMap队列 Java示例List示例Set示例Map示例队列示例 对比 J…...
第一章_线程基础知识
先拜拜大神 Doug Lea(道格.利) java.util.concurrent在并发编程中使用的工具包 为什么学习并用好多线程极其重要 硬件方面 摩尔定律失效 摩尔定律:它是由英特尔创始人之一Gordon Moore(戈登.摩尔)提出来的。其内容为…...
linux(centos7)定时关机解决方案
使用场景与痛点: 根据实际需求,每个星期五都要关闭服务器若干,痛点如下: 1是服务器比较多,按起来麻烦。2是因为周五时间点特殊,着急下班容易忘记关闭服务器。那些要关注才能看的博客,不是我喷&a…...
reactnative笔记
1、React Native 搭建开发环境和创建新项目并运行的详细教程_react项目怎么运行_AaVictory.的博客-CSDN博客 环境搭建遇到报错靠下面两个解决的(模拟器的adb和reactnative的adb版本不同,且都配置环境) 2、 adb server version (41) doesn‘t…...
软件架构模式+系统架构
架构模式对比 分层模式 一般信息系统中最常见的4层划分如下: Presentation layer 表示层(也就是UI层)Application layer 应用层(也就是服务层)Business logic layer 业务逻辑层(也就是领域层)…...
SQL 语句学习总结:
1. 四范式&&范式好处: 数据库范式是数据表设计的规范,在范式规范下,数据库里每个表存储的重复数据降到最少(这有助于数据的一致性维护),同时在数据库范式下,表和表之间不再有很强的数据…...
【Linux】简单的小程序:进度条
在学习进度条之前,需要学一点预备知识。 1. 预备知识 回车换行 现在的换行符(\n)其实就是回车式换行符,另起一行,光标指向最新一行的开头。回车符(\r)是光标指向这一行的开头。 缓冲区 &a…...
Ansible之playbooks剧本
文章目录 一.playbooks介绍1.playbooks简述2.playbooks剧本格式3.playbooks组成部分4.运行playbooks及检测文件配置 二.模块实战实例1.playbooks模块实战实例2.vars模块实战实例3.指定远程主机sudo切换用户4.when模块实战实例5.with_items迭代模块实战实例6.Templates 模块实战…...
在云原生时代,构建高效的大数据存储与分析平台
文章目录 1. **选择适当的数据存储技术:**2. **采用分布式架构:**3. **数据分区和索引:**4. **采用列式存储:**5. **数据压缩和编码:**6. **使用缓存技术:**7. **数据分片和复制:**8. **自动化运…...
第六章,线性变换,1-线性变换、表示矩阵、线性算子
第六章,线性变换,1-线性变换、表示矩阵、线性算子 线性变换表示矩阵 线性算子 R 2 R^2 R2中特殊的线性变换旋转变换算子反射变换算子投影变换算子伸压变换算子剪切变换算子 玩转线性代数(32)线性变换的相关概念的笔记,相关证明以及例子见原文…...
15个关于AI的Github库
这里是我们精选的创新项目列表(排名不分先后),这些项目正在机器学习和人工智能领域蓬勃发展 1:privateGPT 作者:imartinezGithub 星数:16.7K描述:利用LLM的力量,在没有互联网连接的情…...
在Jupyter 中 from XXX import * 报错
在Jupyter 中 导入模块会出现 from XXX import * 报错 但是 XXX.py 确实在同一个目录下,但是无法导入XXX中的XX方法 解决问题是 : 麻烦添加 import sys sys.path.append(./)通过执行 sys.path.append(‘./’) 这行代码,您将当前目录&am…...
小程序密码显示与隐藏的实现
默认密码隐藏起来(显示为点),后面的图标是闭眼;用户点击图标后,图标变成睁眼,同时把密码明文显示出来;如此循环 Page({data: {passwordType: true, // 切换是否密码框show_pass: false // 是否…...
“亚马逊云科技创业加速器”首期聚焦AI,促进入营企业业务发展
生成式AI技术飞速发展,颠覆着人们的生活,正在掀起新一轮的科技革命。在生成式AI的浪潮中,亚马逊云科技旨在为中国的优秀初创企业提供全方位支持,助其抢占先机。 在6月底举办的亚马逊云科技中国峰会上,亚马逊云科技联合…...
已解决“SyntaxError: invalid character in identifier“报错问题
本文摘要:本文已解决 Python FileNotFoundError 的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领…...
2023-09-02力扣每日一题
链接: 2511. 最多可以摧毁的敌人城堡数目 题意和解: 阅读理解题,要从1到-1或-1到1,中间只能有0,求最多能有多少0 实际代码: #include<bits/stdc.h> using namespace std; int captureForts(vect…...
服务war包部署SpringBootServletInitializer 的作用
在 Spring Boot 应用中,如果需要将应用打包成 WAR 包并部署到外部的 Servlet 容器中,就需要使用 SpringBootServletInitializer。 使用步骤: 必须创建war项目,需要创建好web项目的目录嵌入式Tomcat依赖scope指定provided编写Spr…...
[Linux]进程程序替换
[Linux]进程程序替换 文章目录 [Linux]进程程序替换进程程序替换的意义见一见进程程序替换进程程序替换的原理进程程序替换中的写时拷贝介绍进程程序替换接口 进程程序替换的意义 Linux系统下使用fork系统函数创建子进程后,子进程只能执行继承的部分父进程代码&…...
读余华小说《兄弟》
上部读完的一些笔记和思考,下部 TODO 时间:上世纪6、70年代 地点:刘镇 人物:故事中的兄弟指的是:宋钢(兄),李光头(弟),如下为简单的人物和命运图 一些故事:…...
机器学习课后习题 --回归
(一)单选题 1.以下()组变量之间存在线性回归关系? A:学生的性别与他的成绩 B:儿子的身高与父亲的身高 C:正方形的边长与面积D: 正三角形的边长与周长 2.回归问题和分类问题的区别是? A:回归问题有标签,分类问题…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
