2013.07.27
这节课我们要讲的是数组,数组我在学C的时候就接触过,但是java的数组和C还是有所区别的,我们还是一点点的进行介绍。
1、连续空间
首先要定义一个数组,我们这里定义一个int类型数组:int[] array = new int[10];
定义数组时,会在内存中开辟一个空间,大小由4*8*10=320个0 1组成。而且这段空间是连续的,array代表一个首地址,也是array[0]的地址,后面的会根据下表计算其地址。
2、类型固定
定义了一种类型后,就不能再更改,比如我们int[] array = new int[10];
这样就定义了整型数组,那么以后我们使用array[0]时,就要以他为整型去用,而且不能把字符串赋给他。
3、空间固定大小
一旦定义了一个数组,就在内存中开辟了一块固定的空间,其大小不允许再被改变。要是我们开辟了一个长度为10的数组array,当我们引用array[10]时,就会报错说数组溢出。
4、定义方式
数组有多种定义方式,除了我们上面所说的int[] array = new int[10];
还有就是:int[] array = {1,2,3,4,5};
int[] array2 ;array2 = array;
int[] array = new int[]{1,2,3,4,5};
5、数组只有一个唯一的属性:length
数组是一个容器,但是没有方法,而且只有一个属性,那就是数组的长度。知道数组的长度和数据类型,就可以去使用这个数组了。
作业:1、数组排序:我们这里直接调用Arrays类下的sort方法,对数组进行快速排序。
我们这里介绍4种方法:
//希尔排序
private void shellsort() {
int[] array = { 123, 42, 12, 58, 29, 56 };
for (int in = array.length / 2; in > 0; in /= 2) {
for (int i = in; i < array.length; i++) {
int t = array[i];
int j = 0;
for (j = i; j >= in; j = j - in) {
if (t < array[j - in]) {
array[j] = array[j - in];
} else {
break;
}
}
array[j] = t;
}
}
}
//插入排序
private void insort() {
int[] array = { 123, 42, 12, 58, 29, 56 };
for (int i = 1; i < array.length; i++) {
for (int j = i; j > 0; j--) {
if (array[j] < array[j - 1]) {
int t = array[j];
array[j] = array[j - 1];
array[j - 1] = t;
}
}
}
}
//选择排序
private void selectsort() {
int[] array = { 123, 42, 12, 58, 29, 56 };
for (int i = 0; i < array.length; i++) {
int min = i;
for (int j = i + 1; j < array.length; j++) {
if (array[min] > array[j])
min = j;
}
int t = array[i];
array[i] = array[min];
array[min] = t;
}
}
//快速排序
public void arraysort() {
int[] array = { 123, 42, 12, 58, 29, 56 };
//调用Array类中的sort方法
Arrays.sort(array);
}
2、二维数组:随机赋值,找出最大值,输出值,行,列
public void sort() {
//初始化一个数组对象
int[][] array = new int[5][5];
//实例化一个随机数对象
Random r = new Random();
//定义一个整型对象记录最大值
int max = 0;
//循环进行随机赋值
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
array[i][j] = r.nextInt(10);
}
}
//循环找到最大值
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (max < array[i][j])
max = array[i][j];
}
}
System.out.println("最大值为"+max);
//循环遍历找到最大值所在的行和列
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if(array[i][j]==max){
System.out.println("第"+i+"行,第"+j+"列");
}
}
}
}