目录
一、Java数组基础
1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问与修改元素1.2.3 数组遍历1.3 二维数组1.3.1 声明与初始化1.3.2 访问与遍历1.4 三维数组及更高维数组1.5 数组类(Arrays) 1.5.1 常用方法1.6 复制数组1.6.1 系统复制方法1.6.2 手动复制
二、Java集合框架
2.1 集合框架概述2.2 列表类(List) 2.2.1 ArrayList 2.2.2 LinkedList 2.3 集合类(Set) 2.3.1 HashSet 2.3.2 TreeSet 2.4 映射类(Map) 2.4.1 HashMap 2.4.2 TreeMap 2.5 队列类(Queue) 2.5.1 PriorityQueue 2.5.2 ArrayDeque 2.6 堆栈类(Stack) 2.7 集合工具类(Collections)
三、完整案例代码
3.1 数组操作完整示例3.2 集合操作完整示例
四、数组与集合使用对比
总结
一、Java数组基础
1.1 数组结构概述数组是Java中最基本的数据结构之一,用于存储相同类型的多个元素。数组具有以下特点:固定大小:一旦创建,大小不可改变连续内存空间:元素在内存中是连续存储的索引访问:通过从0开始的整数索引访问元素1.2 一维数组1.2.1 声明与初始化// 声明数组int[] arr1; // 推荐方式int arr2[]; // 效果相同,但不推荐// 静态初始化int[] arr3 = {1, 2, 3, 4, 5};String[] names = {"Alice", "Bob", "Charlie"};// 动态初始化int[] arr4 = new int[5]; // 默认初始化为0 boolean[] flags = new boolean[3]; // 默认初始化为false String[] strArr = new String[4]; // 默认初始化为null1.2.2 访问与修改元素int[] numbers = {10, 20, 30, 40, 50};// 访问元素System.out.println(numbers[0]); // 输出: 10 System.out.println(numbers[numbers.length - 1]); // 输出最后一个元素: 50// 修改元素numbers[2] = 300;System.out.println(numbers[2]); // 输出: 3001.2.3 数组遍历// 使用for循环for (int i = 0; i < numbers.length; i++) {System.out.println("Element at index " + i + ": " + numbers[i]);}// 使用增强for循环for (int num : numbers) {System.out.println("Number: " + num);}1.3 二维数组1.3.1 声明与初始化// 声明二维数组int[][] matrix1;int matrix2[][];// 静态初始化int[][] matrix3 = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};// 动态初始化int[][] matrix4 = new int[3][4]; // 3行4列int[][] matrix5 = new int[2][]; // 只指定行数,列数可后续指定matrix5[0] = new int[3];matrix5[1] = new int[5];1.3.2 访问与遍历// 访问元素System.out.println(matrix3[1][2]); // 输出: 6 (第2行第3列)// 遍历二维数组for (int i = 0; i < matrix3.length; i++) {for (int j = 0; j < matrix3[i].length; j++) {System.out.print(matrix3[i][j] + " ");}System.out.println();}// 使用增强for循环for (int[] row : matrix3) {for (int num : row) {System.out.print(num + " ");}System.out.println();}1.4 三维数组及更高维数组// 三维数组声明与初始化int[][][] cube = new int[2][3][4]; // 2个3x4的矩阵// 静态初始化int[][][] cube2 = {{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}},{{13, 14, 15, 16},{17, 18, 19, 20},{21, 22, 23, 24}}};// 访问三维数组元素System.out.println(cube2[1][2][3]); // 输出: 24// 遍历三维数组for (int[][] matrix : cube2) {for (int[] row : matrix) {for (int num : row) {System.out.print(num + " ");}System.out.println();}System.out.println("--- Next Matrix ---");}1.5 数组类(Arrays) Java提供了java.util.Arrays类来操作数组。
1.5.1 常用方法import java.util.Arrays;int[] arr = {5, 2, 9, 1, 5, 6};// 排序Arrays.sort(arr);System.out.println(Arrays.toString(arr)); // [1, 2, 5, 5, 6, 9]// 二分查找(数组必须有序) int index = Arrays.binarySearch(arr, 5);System.out.println("5的索引: " + index); // 2或3(取决于第一个找到的5)// 填充Arrays.fill(arr, 0);System.out.println(Arrays.toString(arr)); // [0, 0, 0, 0, 0, 0]// 比较int[] arr2 = {1, 2, 3};int[] arr3 = {1, 2, 3};System.out.println(Arrays.equals(arr2, arr3)); // true// 复制数组int[] arrCopy = Arrays.copyOf(arr2, arr2.length);int[] arrCopyRange = Arrays.copyOfRange(arr2, 1, 3);1.6 复制数组1.6.1 系统复制方法// 使用System.arraycopy() int[] source = {1, 2, 3, 4, 5};int[] destination = new int[5];System.arraycopy(source, 0, destination, 0, source.length);// 使用Arrays.copyOf() int[] copy1 = Arrays.copyOf(source, source.length);int[] copy2 = Arrays.copyOf(source, 3); // 只复制前3个元素// 使用clone() int[] clone = source.clone();1.6.2 手动复制int[] original = {10, 20, 30, 40, 50};int[] manualCopy = new int[original.length];for (int i = 0; i < original.length; i++) {manualCopy[i] = original[i];}
二、Java集合框架
Java集合框架位于java.util包中,提供了多种数据结构和算法。
2.1 集合框架概述接口实现类特点Collection-所有集合的根接口List ArrayList, LinkedList, Vector, Stack有序,可重复Set HashSet, LinkedHashSet, TreeSet无序,不可重复Queue PriorityQueue, ArrayDeque队列接口Deque ArrayDeque, LinkedList双端队列Map HashMap, LinkedHashMap, TreeMap, Hashtable键值对存储2.2 列表类(List) 2.2.1 ArrayListimport java.util.ArrayList;import java.util.List;// 创建ArrayList List2.2.2 LinkedListimport java.util.LinkedList;LinkedList2.3 集合类(Set) 2.3.1 HashSetimport java.util.HashSet;import java.util.Set;Set2.3.2 TreeSetimport java.util.TreeSet;TreeSet2.4 映射类(Map) 2.4.1 HashMapimport java.util.HashMap;import java.util.Map;Map2.4.2 TreeMapimport java.util.TreeMap;TreeMap2.5 队列类(Queue) 2.5.1 PriorityQueueimport java.util.PriorityQueue;import java.util.Queue;Queue2.5.2 ArrayDequeimport java.util.ArrayDeque;import java.util.Deque;Deque2.6 堆栈类(Stack)虽然Java有Stack类,但推荐使用Deque接口的实现类作为堆栈。
import java.util.ArrayDeque;import java.util.Deque;Deque2.7 集合工具类(Collections)java.util.Collections提供了许多有用的集合操作方法。
import java.util.ArrayList;import java.util.Collections;import java.util.List;List
三、完整案例代码
3.1 数组操作完整示例import java.util.Arrays;public class ArrayDemo {public static void main(String[] args) {// 一维数组示例int[] oneDArray = {5, 2, 9, 1, 5, 6};System.out.println("原始数组: " + Arrays.toString(oneDArray));Arrays.sort(oneDArray);System.out.println("排序后: " + Arrays.toString(oneDArray));int index = Arrays.binarySearch(oneDArray, 5);System.out.println("5的索引: " + index);// 二维数组示例int[][] twoDArray = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};System.out.println("\n二维数组:");for (int[] row : twoDArray) {for (int num : row) {System.out.print(num + " ");}System.out.println();}// 数组复制示例int[] copy = Arrays.copyOf(oneDArray, oneDArray.length);System.out.println("\n数组复制: " + Arrays.toString(copy));// 手动复制int[] manualCopy = new int[oneDArray.length];for (int i = 0; i < oneDArray.length; i++) {manualCopy[i] = oneDArray[i];}System.out.println("手动复制: " + Arrays.toString(manualCopy));}}3.2 集合操作完整示例import java.util.*;public class CollectionDemo {public static void main(String[] args) {// List示例 - ArrayList List
四、数组与集合使用对比
以下是数组和集合的使用场景、优势劣势及代码示例的完整表格:数据结构使用场景优势劣势代码示例数组
1. 数据量固定且已知(如月份天数、配置参数)
2. 需要高效随机访问(如图像处理像素数组)
3. 存储基本数据类型(如
int[]、char[])
1.
内存连续,访问效率高(时间复杂度O(1))
2.
无额外开销,内存占用少
3.
直接支持基本类型,无需装箱/拆箱
1.
长度固定,无法动态扩展
2.
功能有限,缺乏排序、搜索等高级方法
3.
类型单一,所有元素必须相同类型java // 声明并初始化整型数组 int[] numbers = {10, 20, 30}; // 访问元素 int first = numbers[0]; // 输出: 10 // 遍历数组 for (int i = 0; i < numbers.length; i++) { System.out.println(numbers[i]); } 集合(List)
1. 数据量动态变化(如用户列表、日志记录)
2. 需要频繁插入/删除元素(如任务队列)
3. 存储对象类型(如
String、自定义类)
1.
动态扩容,无需预先指定大小
2.
功能丰富,提供add()、remove()、sort()等方法
3.
类型灵活,支持泛型(可存储不同类型对象)
1.
内存不连续,访问效率略低(如LinkedList需遍历)
2.
额外开销,需存储元数据(如容量、负载因子)
3.
仅支持对象,基本类型需自动装箱(如Integer)
java // 创建ArrayList并添加元素 List集合(Set)
1. 需要去重(如标签系统、唯一ID集合)
2. 快速判断元素是否存在(如黑名单过滤)
1.
自动去重,无需手动检查
2.
查找效率高(如HashSet基于哈希表实现)
1.
无序存储,无法通过索引访问
2.
功能受限,不支持get(index)等操作java // 创建HashSet并添加元素 Set集合(Map)
1. 键值对存储(如字典、缓存系统)
2. 需要快速通过键查找值(如数据库索引)
1.
高效查找(如HashMap时间复杂度O(1))
2.
结构灵活,支持自定义键类型
1.
键唯一,重复键会覆盖值
2.
无序存储(除非使用TreeMap)
java // 创建HashMap并添加键值对 Map总结通过本文的学习,我们掌握了Java中数组和集合的基本用法:数组:固定大小,类型相同,连续内存支持一维、二维及更高维度使用Arrays类进行排序、搜索、复制等操作集合框架:List:有序可重复,常用实现有ArrayList和LinkedList Set:无序不可重复,常用实现有HashSet和TreeSet Map:键值对存储,常用实现有HashMap和TreeMap Queue/Deque:队列和双端队列接口使用Collections工具类进行排序、反转等操作
数组和集合各有优缺点:
数组简单高效,但大小固定集合大小可变,提供更多功能,但稍有性能开销在实际开发中,应根据具体需求选择合适的数据结构。对于固定大小的数据,数组是更好的选择;对于需要动态增删的数据,集合更为合适。
到此这篇关于Java中的数组与集合的文章就介绍到这了,更多相关Java数组与集合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:java逗号分隔String字符串及数组、集合相互转换Java ArrayList集合详解(Java动态数组) java与scala数组及集合的基本操作对比java8新特性 stream流的方式遍历集合和数组操作Java数组集合的深度复制代码实例Java中数组与集合的相互转换实现解析java集合与数组的相同点和不同点Java二维数组计算集合总结Java集合与数组区别简介及相互转换实例java数组、泛型、集合在多态中的使用及对比
