3.10数组
数组是一种数据结构,用来存贮同一类型值得集合。
在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。例如:int[] a;
不过这条语句只声明了变量a,并没有将a初始化为一个真正的数组。应该使用new运算符创建数组。int[] a=new int[100];
在java中不要求数组长度是常量。
在创建一个数字数组时,所有元素都初始化为0。boolean数组的元素初始化为false。对象数组的元素初始化为null,这表示这些元素还未存放任何对象。
3.10.1 for each循环
for each循环语句的循环变量将会遍历数组的每一个元素,而不需要使用下标值。
举个例子:
public class Print {
public static void main(String[] args) {
int n;
Scanner in = new Scanner(System.in);
n=in.nextInt();
int[] a=new int[n];
for (int i:a) {
System.out.println(i);
}
}
}
tips:有个更简单的方法打印数组的所有值,即利用Arrays类的toString方法,调用Arrays.toString(a),返回一个包含数组元素的字符串。
3.10.2数组初始化以及匿名数组
int[] a={1,2,3};
a=new int[]{1,2,3};
3.10.3数组拷贝
在java中,允许将一个数组变量拷贝给另一个数组变量。这时,两个变量将引用同一个数组。
public class Print {
public static void main(String[] args) {
int[] a={1,2,3};
int[] b=a;
b[1]=100;
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}
如果希望将一个数组的所有值拷贝到一个新的数组中去,可调用Arrays类的copyOf方法。
public class Print {
public static void main(String[] args) {
int[] a={1,2,3};
int[] b;
b=Arrays.copyOf(a,2*a.length);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
}
}
3.10.4命令行参数
在主函数的参数中,经常见到String[] args ,表明main方法将接收一个字符串数组,也就是命令行参数。
举个例子:
public class Hello{
public static void main(String[] args){
if(args.length==0||args[0].equals("-h"))
System.out.print("Hello,");
else if(args[0].equals("-g"))
System.out.print("Goodbye,");
for(int i=1;i<args.length;i++){
System.out.print(" "+args[i]);
}
System.out.print('!');
}
}
下图是输出
3.10.5 数组排序
Arrays类中的sort方法
Arrays.sort(a);//优化的快速排序算法,默认升序
那降序怎么办?
提供两种办法吧。第一种比较直接
public class Print {
public static void main(String[] args) {
Integer[] a={1,2,3,8,5,7};
Arrays.sort(a,Collections.reverseOrder());
System.out.println(Arrays.toString(a));
}
}
第二种也比较直接吧!
public class Print {
public static void main(String[] args) {
Integer[] a={1,2,3,8,5,7};
Arrays.sort(a, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
System.out.println(Arrays.toString(a));
}
}
这里sort方法的第二个参数是一个匿名内部类
3.10.6多维数组
double[][][] [] a=new double[100] [100];
遍历它也可以使用for each,也可以调用Arrays的方法直接输出:例如
public class Print {
public static void main(String[] args) {
double[][] b={
{1,2,3},
{4,5,6},
{7,8,9},
};
for (double[] row:b) {
for (double value:row) {
System.out.println(value);
}
}//增强for
System.out.println(Arrays.deepToString(b));
}
}