1. 数组
1、数组是同一数据类型的集合,数组一旦创建后,大小就不可变;
2、可以通过索引访问数组元素,但索引超出范围将报错;
3、数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型;
1.1. 声明数组
必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayRefVar; // 首选的方法
// 或者
dataType arrayRefVar[]; // 效果相同,但不是首选方法
1.2. 创建数组
Java语言使用new操作符来创建数组,语法如下:
arrayRefVaribal = new dataType[Size];
数组变量的声明,和创建数组可以用一条语句完成,如下所示:
dataType[] arrayRefVar = new dataType[arraySize];
另外,还可以使用如下的方式创建数组:
dataType[] arrayRefVar = {value0, value1, ..., valuek};
1.3. 实例
一
下面我们是:先申明一个10个空间的Int类型数组,并依次赋值:
private static void test09() {
// 第一种方法,储存10为童鞋的成绩
int[] grade = new int[10];
grade[0] = 90;
grade[1] = 79;
grade[2] = 91;
grade[3] = 80;
// ...
System.out.println("grade = " + Arrays.toString(grade));
//grade = [90, 79, 91, 80, 0, 0, 0, 0, 0, 0]
}
当然,我们没并没有把申请的空间全部赋满,所以后面全是0;这也证明前面所说,int类型默认值是0;
二
如果我们申明时就赋值,那么便可以不指定大小
private static void test10() {
// 如果我们申明时就赋值,那么便可以不指定大小
int[] grade = new int[]{12,34,5,678,75,32,2,12,31,21,31,41};
System.out.println(Arrays.toString(grade));
// [12, 34, 5, 678, 75, 32, 2, 12, 31, 21, 31, 41]
}
2. 处理数组
数组除了是同一类型的元素的集合,还具备一些特殊的属性和方法!
2.1. 循环
我们这里先给大家介绍使用一下for循环:
for-i循环是最简单、基本所有语言通用的一种循环:
private static void test10() {
// 如果我们申明时就赋值,那么便可以不指定大小
int[] grade = new int[]{12, 34, 5, 678, 75, 32, 2, 12, 31, 21, 31, 41};
for (int i = 0; i < grade.length; i++) {
System.out.println(grade[i]);
}
}
除了for-i循环,Java还提供增强for循环:
private static void test10() {
// 如果我们申明时就赋值,那么便可以不指定大小
int[] grade = new int[]{12, 34, 5, 678, 75, 32, 2, 12, 31, 21, 31, 41};
for (int value : grade) {
// 增强for循环
System.out.println(value);
}
}
这是JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
2.2. 排序
对数组进行排序是程序中非常基本的需求。常用的排序算法有冒泡排序、插入排序和快速排序等。
来看一下如何使用冒泡排序算法对一个整型数组从小到大进行排序:
private static void test13() {
int[] num = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
// 排序前:
System.out.println(Arrays.toString(num));
/*[28, 12, 89, 73, 65, 18, 96, 50, 8, 36]*/
for (int i = 0; i < num.length - 1; i++) {
for (int j = 0; j < num.length - i - 1; j++) {
if (num[j] > num[j+1]) {
// 交换num[j]和num[j+1]:
int tmp = num[j];
num[j] = num[j+1];
num[j+1] = tmp;
}
}
}
// 排序后:
System.out.println(Arrays.toString(num));
/*[8, 12, 18, 28, 36, 50, 65, 73, 89, 96]*/
}
当然,以上是我们自己手写的排序,在Arrays类中,已经为我们集成了排序:
private static void test14() {
int[] num = {28, 32, 11, 13, 65, 78, 96, 50, 10, 55};
Arrays.sort(num);
System.out.println(Arrays.toString(num));
/*[10, 11, 13, 28, 32, 50, 55, 65, 78, 96]*/
}
只需简单一行代码即可排序。
3. 多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:
String str[][] = new String[3][4];
type 可以为基本数据类型和复合数据类型,arraylength1 和 arraylength2 必须为正整数,arraylength1 为行数,arraylength2 为列数。
int a[][] = new int[2][3];
二维数组 a 可以看成一个两行三列的数组。
多维数组的引用(以二维数组为例)
对二维数组中的每个元素,引用方式为 arrayName[index1][index2],例如:
num[1][0];
4. Arrays类
Arrays类前面我们代码中已经使用过了,
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
具有以下功能:
- 转换成字符串:toString方法
- 给数组赋值:通过 fill 方法。
- 对数组排序:通过 sort 方法,按升序。
- 比较数组:通过 equals 方法比较数组中元素值是否相等。
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
- .....