数组

声明数组变量

1
2
dataType[] array;   // 首选的方法
dataType array[]; // 效果相同,但不是首选方法

创建数组

1
array = new dataType[arraySize];

创建数组时做了两件事:

  1. 使用dataType[arraySize]创建了一个数组。
  2. 把新创建的数组的引用赋值给变量 array

我们也可以讲声明与创建数组合二为一:

1
dataType[] array = new dataType[arraySize];

还可以使用下面方法来创建数组:

1
dataType[] array = {value0, value1, ..., valuek}; 

数组拷贝

1
2
3
int[] firstArray = {10,20,30,40,50};
int[] secondArray = firstArray;
secondArray[1] = 10;//此时,firstArray[1]的值也变成了10

这种拷贝方式会将两个变量引用到同一个数组。

如果我们希望的是将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法:

1
int[] secondArray = Arrays.copy0f(firstArray, firstArray.length);

第二个参数为新数组的长度,我们通常用此方法来增加数组大小:

1
int[] secondArray = Arrays.copy0f(firstArray, 2 * firstArray.length);

当新数组长度小于原数组时,则只拷贝前面的值,后面的值会被裁切丢弃。

数组排序

Arrays类中给我们提供了一种排序的方法–快速排序QuickSort

1
2
3
int[] a = new in[10000];
...
Arrays.sort(a);

这种排序方法可以满足大部分排序的需求,当然你也可以选择自己写,那就不在本文的范畴之内了。

另外Arrays类中还提供了别的方法,有兴趣的可以自行查阅。

可变参数

允许调用方法时传入不定长度的参数,实质上是基于数组的实现。

例:构造输出最大的数字的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class DemoVarargs {
public static void main(String[] args) {
DemoVarargs demoVarargs = new DemoVarargs();
demoVarargs.printMax(1, 2, 3, 4);
}
public void printMax(double... nums){//可变参数
if(nums.length == 0){
System.out.println("No argument passed");
return;
}
double max = nums[0];
for(double x: nums){
if(x > max){
max = x;
}
}
System.out.println("max:" + max);
}
}

三元运算符

1
x?y:z

x==true,则结果为y,否则结果为z

注意点:

1
2
Object o = true ? new Integer(1) : new Double(2.0);
System.out.println(o);//out:1.0

三元运算符运行的左右两边需要是同一类型,于是int的包装类就自动转换为double的包装类。这与if else有所区别,因此我们在使用三元运算符时需要注意。