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

1. 数组(Array)

概念

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

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

2. 列表(List)

概念

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

特点
  • 动态大小:可以根据需要自动扩展或缩减。
  • 有序:元素按照插入顺序排列。
  • 类型一致 :列表中的所有元素通常是同一类型,但可以通过泛型支持不同类型(如List<Object>)。
示例
java 复制代码
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是按自然顺序排序)。
  • 唯一性:不允许重复元素。
示例
java 复制代码
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

特点
  • 键唯一:每个键只能对应一个值。
  • 键值对:存储的是键值对,可以通过键快速访问对应的值。
示例
java 复制代码
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按优先级处理元素(最高优先级最先处理)。
示例
java 复制代码
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程序。

相关推荐
duapple3 小时前
Golang基于反射的ioctl实现
开发语言·后端·golang
Dxy12393102164 小时前
Python 条件语句详解
开发语言·python
字节源流5 小时前
关于maven的依赖下不下来的问题
java·maven
pjx9875 小时前
服务间的“握手”:OpenFeign声明式调用与客户端负载均衡
java·运维·spring·负载均衡
prinrf('千寻)6 小时前
MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
java·开发语言·mybatis
老华带你飞6 小时前
实习记录小程序|基于SSM+Vue的实习记录小程序设计与实现(源码+数据库+文档)
java·数据库·spring boot·小程序·论文·毕设·实习记录小程序
m0_555762906 小时前
Qt缓动曲线详解
开发语言·qt
在未来等你6 小时前
互联网大厂Java求职面试:AI与大模型应用集成及云原生挑战
java·微服务·ai·kubernetes·大模型·embedding·spring ai
源码技术栈6 小时前
SaaS基于云计算、大数据的Java云HIS平台信息化系统源码
java·大数据·云计算·云his·his系统·云医院·区域his
编程、小哥哥7 小时前
互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
java·spring boot·redis·微服务·prometheus·面试技巧