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

Java基础 — 数组

介绍

     Java数组是存储固定数量同类型元素的有序集合,属于基础数据结构。数组在内存中以连续空间存储数据,通过下标(索引)访问元素,索引从0开始。声明数组时可使用两种语法:数据类型[] 数组名(推荐)或数据类型 数组名[]。创建数组需指定长度,如int[] scores = new int[5]声明长度为5的整型数组,此时所有元素初始化为0(基本类型默认值,对象数组初始化为null)。

     数组特点鲜明:长度固定(通过数组名.length获取),元素类型统一,支持随机访问(时间复杂度O(1))。初始化方式分为静态初始化(int[] arr = {1,2,3})和动态初始化。二维数组本质是"数组的数组",例如int[][] matrix = new int[3][4]创建3行4列的矩阵。

     尽管数组无法动态扩容,但其高效的读写性能使其广泛应用于数值计算、算法实现等场景,是理解更复杂集合类(如ArrayList)的重要基础。开发中常结合循环结构处理批量数据操作。


数组声明与初始化

  • 声明:数据类型[] 数组名;或数据类型 数组名[];
  • 初始化:
 // 动态初始化(指定长度)int[] arr1 = new int[5]; // 默认值0// 静态初始化(指定元素)int[] arr2 = {1, 2, 3}; String[] names = new String[]{"Alice", "Bob"};

访问与修改元素

索引从0开始,通过数组名[索引]访问元素。

  int[] arr = {10, 20, 30};System.out.println(arr[0]); // 输出10arr[1] = 200; // 修改第二个元素为200

数组长度

固定不可变,通过数组名.length获取长度。

  int[] arr = new int[5];System.out.println(arr.length); // 输出5

遍历数组

Java数组遍历常用for循环和增强for循环。传统for通过索引访问元素(如for(int i=0; i<arr.length; i++)),增强for直接迭代元素(for(int num : arr))。前者适合索引操作,后者代码更简洁。

普通for循环

  for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}

增强for循环(foreach)

  for (int num : arr) {System.out.println(num);}

多维数组

Java多维数组是数组的嵌套结构,通过数组元素存储数组实现。二维数组常用,声明如int[][] arr,可动态创建new int[3][4]或静态初始化{{1,2},{3}}。每行长度可不同,适用于矩阵运算、表格数据等场景,通过双重循环遍历操作。

二维数组声明与初始化

  int[][] matrix1 = new int[3][3]; // 3行3列int[][] matrix2 = {{1,2}, {3,4,5}}; // 不规则数组

遍历二维数组

  for (int i = 0; i < matrix2.length; i++) {for (int j = 0; j < matrix2[i].length; j++) {System.out.print(matrix2[i][j] + " ");}System.out.println();}

数组的默认值

  1. 基本类型:int默认为0,boolean默认为false。
  2. 引用类型(如String):默认为null。

数组工具类 Arrays

  1. 排序:Arrays.sort(arr)
  2. 二分查找:Arrays.binarySearch(arr, key)
  3. 填充值:Arrays.fill(arr, 5)
  4. 转为字符串:Arrays.toString(arr)
  int[] arr = {3, 1, 4};Arrays.sort(arr); // arr变为[1, 3, 4]System.out.println(Arrays.toString(arr)); // 输出[1, 3, 4]

数组拷贝

Java数组拷贝常用System.arraycopy()或Arrays.copyOf(),支持浅拷贝。深拷贝需遍历复制或序列化,确保数据独立,避免引用共享问题。

System.arraycopy()

  int[] src = {1, 2, 3};int[] dest = new int[3];System.arraycopy(src, 0, dest, 0, src.length);

Arrays.copyOf()

  int[] newArr = Arrays.copyOf(src, src.length);

常见错误

  • 空指针异常:未初始化的数组直接访问。
   int[] arr;System.out.println(arr[0]); // 编译错误!
  • 索引越界:访问不存在的索引。
   int[] arr = {1, 2};System.out.println(arr[2]); // 运行时抛出ArrayIndexOutOfBoundsException

数组与集合的区别

  1. 数组:长度固定,可存基本类型和对象。
  2. 集合(如ArrayList):长度动态增长,只能存对象。

示例代码汇总

public class ArrayDemo {public static void main(String[] args) {// 初始化与遍历int[] arr = {5, 3, 8};for (int num : arr) {System.out.print(num + " "); // 输出5 3 8}// 二维数组int[][] matrix = {{1,2}, {3,4,5}};System.out.println(matrix[1][2]); // 输出5// 使用Arrays工具类Arrays.sort(arr);System.out.println(Arrays.toString(arr)); // 输出[3, 5, 8]}
}

总结

     Java数组是存储固定数量同类型元素的数据结构,属于对象类型。声明数组需指定元素类型和方括号,如int[] arr或int arr[],推荐前者规范写法。创建数组必须使用new关键字指定长度,例如int[] arr = new int[5],此时元素会根据数据类型自动初始化默认值(整型0,浮点0.0,布尔false,对象null)。也可直接初始化具体元素:String[] names = {"Alice", "Bob"}。

     数组通过从0开始的索引访问元素,arr[0]表示首个元素。数组长度由length属性获取(非方法),创建后长度不可变。若需扩容需新建数组并复制数据,可使用System.arraycopy()方法或Arrays.copyOf()工具类。

     多维数组本质是"数组的数组",如二维数组int[][] matrix = new int[3][4]创建3行4列结构,每行可独立指定长度形成锯齿数组。遍历数组通常使用for循环配合索引,增强for循环for(int num : arr)适合只读场景。

     数组在内存中以连续空间存储,查询效率高但增删元素效率低。需注意避免ArrayIndexOutOfBoundsException越界异常。实际开发中若需动态扩容,可优先考虑ArrayList集合。数组作为基础数据结构,广泛用于算法实现、矩阵运算及批量数据处理场景。

http://www.xdnf.cn/news/178129.html

相关文章:

  • Spark-Streaming(四)
  • 天梯——现代战争
  • NTFS和EXFAT哪个好:深入解析这两种文件系统的优劣
  • FAQ运用
  • 在使用docker创建容器运行报错no main manifest attribute, in app.jar
  • springboot logback 默认加载配置文件顺序
  • Leetcode:283. 移动零
  • 【大模型微调与应用开发实战指南】从理论到工业级部署
  • COMSOL多孔介质自然对流与传热现象的仿真研究
  • 《原神/星穹铁道私服怎么建?内网穿透+本地调试完整指南》
  • 【Vue】单元测试(Jest/Vue Test Utils)
  • 高德地图 API 拿到当前定位和目的地址转经纬度,实现路径规划
  • django filter 排除字段
  • C++学习:六个月从基础到就业——模板编程:类模板
  • 淘宝tb.cn短链接生成
  • 基于ruoyi-plus实现AI聊天和绘画
  • 前端面试 js
  • 考研系列-计算机组成原理第六章、总线
  • 国标GB28181视频平台EasyCVR助力打造太阳能供电远程视频监控系统
  • 2025系统架构师---数据库架构风格
  • 多模态大语言模型arxiv论文略读(四十四)
  • Laravel5.7的一些用法
  • Java编程中常见错误的总结和解决方法
  • clickhouse#复制修改数据
  • echarts自定义图表
  • 基于深度学习的医疗诊断辅助系统设计
  • 项目驱动 CAN-bus现场总线基础教程》随笔
  • 成都蒲江石象湖旅游攻略之石象湖郁金香最佳观赏时间
  • Java求职面试:从Spring Boot到微服务架构的全面解析
  • 2.7 城市桥梁工程安全质量控制