欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Java数组

时间:2023-06-08
数组

数组

数组概况数组声明创建数组的基本特点数组边界数组使用多维数组Arrays 类稀疏数组笔记 数组 数组概况

数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们 数组声明创建

首先必须声明数组变量,才能在程序中使用数组

dataType[] arrayRefVar;//首选dataType arrayRefVar[];//效果相同,但不推荐

java语言new操作符来创建数组

dataType[] arrayRefVar = new dataType[arraySize];

数组的元素是通过索引访问的,数组索引从0开始

获取数组长度:

array.length

public class Demo01 { public static void main(String[] args) { int[] numbers;//1.声明一个数组 // int numbers[]; 不推荐使用 numbers = new int[10];//2.创建一个数组 //1.2.可以合成 int[] numbers = new int[10]; //3.给数组元素中赋值 numbers[0] = 1; numbers[1] = 2; numbers[2] = 3; numbers[3] = 4; numbers[4] = 5; numbers[5] = 6; numbers[6] = 7; numbers[7] = 8; numbers[8] = 9; numbers[9] = 10; //计算所有元素的和 int sum = 0; //获取数组长度: array.length for (int i = 0; i < numbers.length; i++) { sum = sum + numbers[i]; } System.out.println("总和为: " + sum); }}

数组的基本特点

长度确定,一旦创建,大小不可以改变元素类型必须相同,不允许出现混合类型数组中的元素可以是任何数据类型,包括基本类型和应用类型数组变量属于应用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身实在堆中的

public class Demo02 { public static void main(String[] args) { //静态初始化 创建 + 赋值 int[] a = {1, 2, 3}; System.out.println(a[0]); //动态初始化 包含默认初始化 0 or null int[] b = new int[10]; b[0] = 10; System.out.println(b[0]); System.out.println(b[1]); System.out.println(b[2]); }}

数组边界

下标的合法区间: [0,length - 1],越界就会报错

public static void main(String[] args){ int[] a = new int[2]; System.out.println(a[2]);}

ArrayIndexOutOfBoundsException 数组下标越界异常

数组 是相同类型的有序集合

数组也是对象,数组元素相当于对象的成员变量

数组长度是确定的,不可变的,如果越界,则报:ArrayIndexOutOfBoundsException

数组使用

普通For循环

For-Each循环

数组作方法入参

数组作返回值

public class Demo03 { public static void main(String[] args) { int[] arrays = {1, 2, 3, 4, 5}; //打印全部的数组元素 for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } System.out.println("======================"); //计算所有元素的和 int sum = 0; for (int i = 0; i < arrays.length; i++) { sum += arrays[i]; } System.out.println("sum = " + sum); System.out.println("======================"); //查找最大元素 int max = arrays[0]; for (int i = 0; i < arrays.length; i++) { if (arrays[i] > max){ max = arrays[i]; } } System.out.println("max = " + max); }}

public class Demo04 { public static void main(String[] args) { int[] arrays = {1, 2, 3, 4, 5}; //JDK1.5 没有下标 //For-Each循环 for (int array : arrays) { System.out.println(array); } printArray(arrays); System.out.println(); int[] reverse = reverse(arrays); printArray(reverse); } //打印数组元素 数组作方法入参 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i] + " "); } } //反转数组 数组作返回值 public static int[] reverse(int[] arrays){ int[] result = new int[arrays.length]; //反转操作 for (int i = 0, j = result.length -1; i < arrays.length; i++,j--) { result[j] = arrays[i]; } return result; }}

多维数组

多维数组可以看出是数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个一维数组

二维数组

int a[][] = new int[2][5];

以上二维数组a 可以看成一个两行五列的数组

public class Demo05 { public static void main(String[] args) { int[][] array = {{1, 2}, {2, 3}, {3, 4}, {4, 5}}; System.out.println(array.length); System.out.println(array[0].length); System.out.println("==================="); printArray(array[0]); System.out.println(); System.out.println("====================="); System.out.println(array[0][0]); System.out.println(array[0][1]); System.out.println("==================="); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i] .length; j++) { System.out.println(array[i][j]); } } } //打印数组元素 数组作方法入参 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i] + " "); } }}

Arrays 类

数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作查看JDK帮助文档Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(是“不用”而不是“不能”)功能

给数组赋值:通过fill方法对数组排序:通过sort方法,按升序比较数组:通过equals方法比较数组中元素值是否相等查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找

public class Demo06 { public static void main(String[] args) { int[] a = {2, 5, 9, 6, 8}; System.out.println(a);//[I@1b6d3586 //打印数组元素 System.out.println(Arrays.toString(a)); printArray(a); System.out.println(); System.out.println("================="); Arrays.sort(a);//数组进行排序 System.out.println(Arrays.toString(a)); System.out.println("=================="); Arrays.fill(a,2, 4, 0);//填充 左闭右开 System.out.println(Arrays.toString(a)); } // public static void printArray(int[] a){ for (int i = 0; i < a.length; i++) { if (i == 0){ System.out.print("["); } if (i == a.length - 1){ System.out.print(a[i] + "]"); }else{ System.out.print(a[i] + ", "); } } }}

稀疏数组

当一个数组中大部分元素为0,或者同一值的数组时,可以使用稀疏数组来保存该数组

稀疏数组的处理方式是:

记录数组一共有几行几列,有多少个不同值把具体有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

如下图:左边是原始数组,右边是稀疏数组

public class SparseMatrix { public static void main(String[] args) { //1.创建一个二维数组 11*11 0:没有棋子 1:黑棋 2:白棋 int[][] array1 = new int[11][11]; array1[1][2] = 1; array1[2][3] = 2; //输出原始的数组 System.out.println("输出的原始的数组"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt + "t"); } System.out.println(); } System.out.println("======================="); //转换为稀疏数组保存 //获取有效值个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array1[i][j] != 0){ sum++; } } } System.out.println("有效值个数:" + sum); //创建一个稀疏数组 int[][] array2 = new int[sum+1][3]; array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = sum; //遍历二维数组,将非零的值,存放在稀疏数组中 int count = 0; for (int i = 0; i < array1.length; i++) { for (int j = 0; j < array1[i].length; j++) { if (array1[i][j] != 0){ count++; array2[count][0] = i; array2[count][1] = j; array2[count][2] = array1[i][j]; } } } //输出稀疏数组 System.out.println("稀疏数组:"); for (int i = 0; i < array2.length; i++) { System.out.println(array2[i][0] + "t" + array2[i][1] + "t" + array2[i][2] + "t"); } System.out.println("=========================="); //1.读取稀疏数组 int[][] array3 = new int[array2[0][0]][array2[0][1]]; //2.给其中的元素还原它的值 for (int i = 1; i < array2.length; i++) { array3[array2[i][0]][array2[i][1]] = array2[i][2]; } //打印 for (int[] ints : array3) { for (int anInt : ints) { System.out.print(anInt + "t"); } System.out.println(); } }}

笔记

Java数组.md网盘链接
提取码: weam

点击跳转狂神说
P51-P59视频详解Java数组

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。