什么是数组

什么是数组

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

数组描述的是相同类型的若干个数据,按照一定的先后次序排序组成而成的

其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们

数组的声明和创建

数组要声明后才可以使用

dataType[] arrayRefVar;

dataType arrayRefVar[];

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

dataType[] arrayRefVar = new dataType[arraySize];

三种初始化及内存分析

静态初始化

int[] a = {1,2,3,4,5};

动态初始化

int[] a = new int[2];

a[0] = 1;

a[1] = 2;

数组的默认初始化

数组是引用类型,它的元素相对于类的实例变量,因此数组一经分配空间,其中每个元素也按照实例变量的方式被隐式初始化

下标越界以及小结

数组下标的合法区间:[0,length-1]

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

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

数组长度是确定的,不可变的,如果越界则报错”ArrayIndexOutofBounds“

数组的使用

普通的for循环

for (int i = 0; i < a.length; i++) {

System.out.println(a[i]);

}

For-Each循环

for(int array: arrays){

System.out.println(array);

}

数组当作方法入参

public static void printArrays(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 = arrays.length-1;i < arrays.length ;i++, j--){

result[j] = arrays[i];

}

return result;

}

二维数组

二维数组就是数组的数组,也就是说一个数组中每个元素也是个数组

int[][] array = {{1,2}, {3,4},{5,6}};

// printArray(array[0]);

for (int i = 0; i < array.length; i++) {

for (int j = 0; j < array[i].length; j++) {

System.out.print(array[i][j] + " ");

}

System.out.println();

}

多维数组同理进行嵌套

Arrays类的讲解

Arrays类提供了对数组操作的方法

下面是Arrays类中一些常用的方法

static void sort(int[] a);

static void sort(int[] a, int fromIndex, int toIndex);

static String toString(int[] a);

static void fill(int[] a, int val);

static void fill(int[] a, int fromIndex, int toIndex, int val);

冒泡排序

public static int[] sort(int[] a){

for (int i = 0; i < a.length-1; i++) {

for (int j = 0; j < a.length-1-i; j++) {

if(a[j+1]

int t = a[j+1];

a[j+1] = a[j];

a[j] = t;

}

}

}

return a;

}

外循环确定轮数

由于每一轮都会确定一个最大/最小的数,因此每进行i轮,内循环可以少比较i次

内循环里,遍历数组,每相邻的两个元素进行比较,然后交换

稀疏数组

压缩数组存储空间的一种数据结构

代码实现如下

//建立一个数组

int[][] array1 = new int[11][11];

array1[1][2] = 100;

array1[2][3] = 200;

//获取有效元素个数

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++;

}

}

}

//建立稀疏数组,初始化行数,列数和有效元素个数

int[][] array2 = new int[count+1][3];

array2[0][0] = 11;

array2[0][1] = 11;

array2[0][2] = 2;

//遍历原数组,填充稀疏数组

int k=0;

for (int i = 0; i < array1.length; i++) {

for (int j = 0; j < array1[i].length; j++) {

if(array1[i][j] != 0){

k++;

array2[k][0] = i;

array2[k][1] = j;

array2[k][2] = array1[i][j];

}

}

}

//还原稀疏数组

//初始化

int[][] array3 = new int[array2[0][0]][array2[0][1]];

//遍历稀疏数组,填充到新数组中

for (int i = 1; i < array2.length; i++) {

for (int j = 0; j < array2[i].length; j++) {

array3[array2[i][0]][array2[i][1]] = array2[i][2];

}

}

[an error occurred while processing the directive]