当前位置: 首页 > news >正文

java中Array(数组)、List(列表)、Set(集合)、Map(映射)、Queue(队列)详解

1. 数组(Array)

概念

数组是存储固定大小相同类型元素的集合。数组在Java中是静态的,长度一旦确定就不能改变。

特点
  • 固定大小:数组长度固定,不能动态改变。
  • 索引访问:通过索引(从0开始)快速访问元素。
  • 类型一致:数组中的所有元素必须是相同类型。
示例
int[] numbers = new int[5]; // 声明一个包含5个整数的数组
numbers[0] = 1; // 向数组中赋值
System.out.println(numbers[0]); // 输出数组的第一个元素
优缺点
  • 优点:访问和修改速度快,适合固定大小的数据集。
  • 缺点:大小不可变,不适合需要动态添加或删除元素的场景。

2. 列表(List)

概念

列表是一个有序的集合,允许重复元素,并且可以动态调整大小。列表是Java集合框架的一部分,最常用的实现是ArrayListLinkedList

特点
  • 动态大小:可以根据需要自动扩展或缩减。
  • 有序:元素按照插入顺序排列。
  • 类型一致:列表中的所有元素通常是同一类型,但可以通过泛型支持不同类型(如List<Object>)。
示例
import java.util.ArrayList;
import java.util.List;List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
System.out.println(list.get(0)); // 输出 "Apple"
ArrayList vs LinkedList
  • ArrayList:底层基于数组,访问速度快,但插入和删除元素速度相对慢(需要移动元素)。
  • LinkedList:底层基于双向链表,插入和删除速度快,但访问速度相对慢(需要遍历链表)。
优缺点
  • 优点:动态调整大小,适合需要频繁添加、删除操作的数据集。
  • 缺点:访问速度比数组慢(尤其是LinkedList)。

3. 集合(Set)

概念

集合是一个不允许重复元素的无序集合。常用的实现有HashSetTreeSet

特点
  • 无序:元素没有特定顺序(TreeSet是按自然顺序排序)。
  • 唯一性:不允许重复元素。
示例
import java.util.HashSet;
import java.util.Set;Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // 尝试添加重复元素
System.out.println(set.size()); // 输出 2,因为集合不允许重复
HashSet vs TreeSet
  • HashSet:基于哈希表,操作速度快,但元素无序。
  • TreeSet:基于红黑树,元素有序,但操作速度相对慢。
优缺点
  • 优点:保证元素唯一,适合需要快速查找和去重的数据集。
  • 缺点:不保留插入顺序,TreeSet操作性能较HashSet低。

4. 映射(Map)

概念

映射是一个键值对的集合,每个键唯一映射到一个值。常用的实现有HashMapTreeMap

特点
  • 键唯一:每个键只能对应一个值。
  • 键值对:存储的是键值对,可以通过键快速访问对应的值。
示例
import java.util.HashMap;
import java.util.Map;Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
System.out.println(map.get("Apple")); // 输出 1
HashMap vs TreeMap
  • HashMap:基于哈希表,键值对无序,但操作速度快。
  • TreeMap:基于红黑树,键值对按键的自然顺序排序,但操作速度相对慢。
优缺点
  • 优点:可以快速访问、插入、删除键值对,适合映射关系的数据集。
  • 缺点TreeMap性能较低,HashMap不保留顺序。

5. 队列(Queue)

概念

队列是一种按顺序处理元素的集合,支持FIFO(先进先出)原则。常用的实现有LinkedListPriorityQueue

特点
  • FIFO:先进先出,最早加入的元素最先处理。
  • 优先级队列PriorityQueue按优先级处理元素(最高优先级最先处理)。
示例
import java.util.LinkedList;
import java.util.Queue;Queue<String> queue = new LinkedList<>();
queue.add("Apple");
queue.add("Banana");
System.out.println(queue.poll()); // 输出 "Apple"
优缺点
  • 优点:适合需要顺序处理元素的场景。
  • 缺点:不支持随机访问,只能按顺序操作。

总结

数据结构特点适用场景
数组(Array)固定大小,索引访问,类型一致固定大小数据集,快速访问
列表(List)动态大小,有序,允许重复需要频繁添加、删除元素的数据集
集合(Set)无序,不允许重复元素快速查找,去重
映射(Map)键值对,键唯一映射关系的数据集,快速访问键对应的值
队列(Queue)FIFO顺序处理元素按顺序处理元素的场景

掌握这些基本数据结构及其应用场景,能够帮助你更有效地处理和管理数据,从而编写更高效的Java程序。

相关文章:

  • 【面试题】MySQL常见面试题总结
  • 深度学习第二章
  • Perplexity AI — 探索网络,发掘知识,沟通思想
  • 基于鲸鱼优化的DSN弱栅栏覆盖算法matlab仿真
  • MySQL之优化服务器设置(五)
  • 几何公差的设计和选用
  • k8s-kubernetes常用命令,服务部署,可视化控制台安装及token的生成
  • 【Android面试八股文】在Android中,出现ClassNotFound的有可能的原因是什么?
  • 富格林:细心发现虚假确保安全
  • 分层解耦
  • 【高端精品】最新手机版微信小程序(拼多多+京东)全自动操作项目
  • springcloud入门与实践
  • Django 中间件
  • 飞书API 2-1:如何通过 API 创建文件夹?
  • Endless OS简介
  • dva中组件的懒加载
  • Facebook AccountKit 接入的坑点
  • IDEA常用插件整理
  • JDK9: 集成 Jshell 和 Maven 项目.
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • passportjs 源码分析
  • swift基础之_对象 实例方法 对象方法。
  • Web标准制定过程
  • windows下使用nginx调试简介
  • 回顾2016
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 设计模式 开闭原则
  • 跳前端坑前,先看看这个!!
  • 突破自己的技术思维
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 阿里云移动端播放器高级功能介绍
  • 仓管云——企业云erp功能有哪些?
  • 带你开发类似Pokemon Go的AR游戏
  • # SpringBoot 如何让指定的Bean先加载
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (~_~)
  • (1) caustics\
  • (1)STL算法之遍历容器
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (12)目标检测_SSD基于pytorch搭建代码
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (四)stm32之通信协议
  • (五)IO流之ByteArrayInput/OutputStream
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • (杂交版)植物大战僵尸
  • (转)jQuery 基础
  • ... 是什么 ?... 有什么用处?