一、什么是数组?
•数组是相同类型数据的集合,数组的内存存储空间是连续的。
•可以使用以下三种方式声明数组:
数据类型 标识符 [ ];
数据类型 标识符[ ] = new 数据类型[大小];
数据类型 标识符 [ ] = {值 1,值 2,…值 N} ;
•注意:数组是对象属于引用类型;基本数据类型的数组也是对象。
int[ ] students = new int[30];
int[] numbers = {4,2,9,4,5};
//int[] numbers = new int[]{4,2,9,4,5} ok
// int[] numbers = new int[5]{4,2,9,4,5} error
二、数组的内存结构
a)一维数组
b)二维数组
三、数组的特点
a)数组的内存空间大小固定的,一但JVM为数组分配内存空间就不能再变大或变小。
double[] score; //声明一个整型数组
score = new double[10];
score[0] = 77;
score[1] = 73;
score[2] = 72;
score[3] = 70;
score[4] = 87;
……
//能不能再重新创建score数组???? 从编程的角度来说是可以的, 但是JVM会将原来分配存放10个double数的空间丢弃,从新分配一块存放20个double数的内存空间
score = new double[20];
四、数组下标的问题:
a)最小下标为:0;最大下标: 数组标识符.length – 1。
b)下标越界问题:
int[ ] score = new int[2];
score[0] = 89;
score[1] = 63;
//数组下标越界,在编译时无法发现,只有在运行时报错(运行时异常)
score[2] = 45;
System.out.println(score[2]);
五、JDK1.5新型的for循环结构:foreach循环
语法:
for(数组元素类型 元素 : 数组){
……
}
示例:
int arr[] = {2, 3, 1}; //定义并初始化一个数组
for(int x : arr){ //x为循环的当前元素
System.out.println(x); //逐个输出数组元素的值
}
六、排序算法
a)冒泡排序
b)选择排序:
七、二维数组
a)数组的每个元素又是一个一维数组,这样的数组称为二维数组。
b)语法:
//方式1:声明时直接初始化
//二维数组里的每一个元素是一个一维数
int[ ][ ] stuScores = { {11,12}, {21,22}, {31,32,33}, {41,42}};
//方式2:
Int[ ][ ] stuScores = new int[2][3];
乘法表的实现思路:
//动态分配内存空间
// 1. 首先先动态分配第二维数组的大小,用循环解决,不要像这里这样硬编码
int[][] mulTable = new int[9][ ];
mulTable[0] = new int[1]; //第一行存一个元素
mulTable[1] = new int[2]; //第二行存二个元素
mulTable[2] = new int[3]; //第三行存三个元素
// 2. 给数组的每一行每一列赋值
for(int i=0; i<multiplyTable.length; i++){ //第一维数组的长度
for(int j=0; j<multiplyTable[i].length; j++){ //第二维数组的长度
//……….
}
}
// 3. 将数组的每一行每一列输出
八、Java.util.Arrays:对数组常用操作的工具类
a)Arrays.toString(数组): 将数组转换成字符串;
b)Arrays.sort(数组): 对数组做自然排序;
c)boolean equals(array1,array2):比较两个数组是否相等;
d)void fill(array,val):把数组array所有元素都赋值为val;
e)copyof(array,length):把数组array复制成一个长度为length的新数组;