java学习笔记--基础篇07(数组)
JAVA数组
1、数组概述
-
数组是相同类型数据的有序集合
-
每个数组元素可以通过一个下标(索引)来访问,数组下标从0开始
2、数组声明创建
2.1声明
1 dateType[] array; //首选方法 2 或 3 dateType array[]; //效果相同,但不是首选
2.2创建
1 dateType[] Array = new dateType[arraySize];
3、java内存简单分析

1 int[] array = new int[10]; 2 array[0] = 1; 3 array[1] = 2; 4 array[2] = 3; 5 ...

4、数据初始化
-
静态初始化
1 int[] a={1,2,3};
-
动态初始化
1 int[] array = new int[10]; 2 array[0] = 1; 3 array[1] = 2; 4 array[2] = 3;
-
数组默认初始化
数组是引用类型,它的元素相当于类的实例变量。因此数组一经分配空间,其中每个元素也被按照实例变量同样的方式被隐式初始化
5、数组的基本特点
-
其长度是确定的,数组一旦被创建,其大小就不可变了
-
其元素必须是相同的类型,不允许出现混合类型
-
数组元素可以是任何数据类型,包括基本类型和引用类型(如数组套数组)
-
数组可以看成是对象,数组中每个元素相当于该对象的成员变量,数组对象本身在堆中存储
6、数组边界
-
下标的合法区间[0,length-1],一旦越界就会报错:ArrayIndexOutOfBoundsException
7、数组的使用
-
普通for循环
-
遍历循环 for-each
-
数组可以作为方法的参数和返回值
1 package array; 2 3 public class ArrayDemo02 { 4 public static void main(String[] args) { 5 int[] arrays = {1,2,3,4,5,6}; 6 7 //查找最大的元素 普通for循环 8 int max = arrays[0]; 9 for (int i = 1; i < arrays.length; i++) { 10 if(max < arrays[i]){ 11 max = arrays[i]; 12 } 13 } 14 System.out.println("max="+max); 15 System.out.println("------------------------"); 16 //计算所有元素的和 foreach 17 int sum = 0; 18 for (int array : arrays) { 19 sum += array; 20 } 21 System.out.println("sum="+sum); 22 System.out.println("------------------------"); 23 24 int[] rev = reverse(arrays); 25 arrayPrint(rev); 26 } 27 28 public static void arrayPrint(int[] arrays){ 29 //遍历打印 30 for (int i = 0; i < arrays.length; i++) { 31 System.out.print(arrays[i]+" "); 32 } 33 } 34 public static int[] reverse(int[] arrays){ 35 int[] result = new int[arrays.length]; 36 // 反转数组 37 for (int i = 0,j=result.length-1; i < arrays.length; i++,j--) { 38 result[j] = arrays[i]; 39 } 40 return result; 41 } 42 }
8、多维数组
-
多维数组可以看成数组的数组

- 二维数组定义
1 int[][] array = {{1,2},{2,3},{3,4},{4,5}};
9、Array 类
-
java.util.Arrays 数组的工具类,可以对数组进行一些基本的操作
-
类中的方法都是static的 可以直接调用
-
常用的功能:
-
-
对数组进行排序(升序),sort方法
-
比较数组,equals方法
-
查找元素,binarySearch方法
-
-
学习这个类可以通过jdk文档或者直接查看源码的方式

-
当数组中大部分元素为0,或者为相同元素时,可以用稀疏数组保存该数组元素
-
稀疏数组的处理方式:
-
记录数组一共有几行几列,有多少不同的值
-
把具有不同值的元素的行列下标及值记录在一个小规模的数组中,从而减小该程序的规模

1 package array; 2 3 public class ArrayDemo03 { 4 public static void main(String[] args) { 5 //定义数组 6 int[][] array01= new int[6][7]; 7 array01[0][3] = 22; 8 array01[0][6] = 15; 9 array01[1][1] = 11; 10 array01[1][5] = 17; 11 array01[2][3] = -6; 12 array01[3][5] = 39; 13 array01[4][0] = 91; 14 array01[5][2] = 28; 15 16 System.out.println("原始数组--------------"); 17 printarrays(array01); 18 System.out.println("转化后数组-------------"); 19 int[][] array02 = sparceArrays(array01); 20 printarrays(array02); 21 System.out.println("还原后数组-------------"); 22 int[][] array03 = restoreArrays(array02); 23 printarrays(array03); 24 25 } 26 27 // 打印数组 28 public static void printarrays(int[][] arrays){ 29 for (int[] array : arrays) { 30 for (int i : array) { 31 System.out.print(i+"\t"); 32 } 33 System.out.println(); 34 } 35 } 36 37 //转换成稀疏数组 38 public static int[][] sparceArrays(int[][] arrays){ 39 // if (arrays.length==0){ 40 // System.out.println("数据错误"); 41 // return null; 42 // }else if (arrays[0].length==0){ 43 // System.out.println("数据错误"); 44 // return null; 45 // } 46 47 //扫描原矩阵获取数据数量count 48 int count = 0; 49 for (int[] array : arrays) { 50 for (int i : array) { 51 if(i!=0){ 52 count++; 53 } 54 } 55 } 56 57 //定义 多了一行表头 58 int[][] result = new int[count+1][3]; 59 //表头 60 result[0][0] = arrays.length; 61 result[0][1] = arrays[0].length; 62 result[0][2] = count; 63 //转换数据 64 count = 1; 65 for (int i = 0; i < arrays.length; i++) { 66 for (int j = 0; j < arrays[i].length; j++) { 67 if (arrays[i][j]!=0){ 68 result[count][0] = i; 69 result[count][1] = j; 70 result[count][2] = arrays[i][j]; 71 count++; 72 } 73 } 74 } 75 return result; 76 } 77 78 //还原数组 79 public static int[][] restoreArrays(int[][] arrays){ 80 //取表头数据定义数组 81 int[][] result = new int[arrays[0][0]][arrays[0][1]]; 82 for (int i = 1; i < arrays.length; i++) { 83 result[arrays[i][0]][arrays[i][1]] = arrays[i][2]; 84 } 85 return result; 86 } 87 }
浙公网安备 33010602011771号