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程序。

相关推荐
Lhappy嘻嘻13 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
科技道人13 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
伊玛目的门徒13 小时前
试用leetcode之典中典 二数之和问题
java·算法·leetcode
逝水无殇15 小时前
C# 异常处理详解
开发语言·后端·c#
懒鸟一枚16 小时前
深入理解 Linux 内存、Swap 交换分区与分页机制的关系
java·linux·数据库
玖玥拾17 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾17 小时前
Rust 学习目录
开发语言·学习·rust
我命由我1234517 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑18 小时前
Sentinel安装
java·后端·微服务
云泽80818 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范