数组储存相同类型值的序列
1.声明数组
int[] a这仅仅时声明了变量a,并没有将a初始化为真正的数组,应该使用new来操作符创建数组。
//第一种数组创建方式
int []arr=new int [n]//创建一个长度为n的数组,Java中数组长度不要求是常量
//第二种创建数组的方式
int []arr={1,2,3,4,5}//也可以写成arr=new int[]{1,2,3,4,5}
注:Java允许出现长度为0的数组,int []arr=new int [0], int[]arr={}。
多维数组
double [][]arr=new double[m][n]
double [][]arr=new double{{1,2,3},{1,23,4}}
2.数组的访问
创建一个数组时,所有元素都被初始化为0,boolean数组全被初始化为false。对象数组全被初始化为null,例如String []arr,所有数组都是null串,如果想为空串只能用循环一个个赋值。
3.for each循环
增强for循环结构,可以用来依次处理数组中的每个元素,不必指定下标。
格式为:for(Variable:collection)statement
注:collection这集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(例如ArrayList)
int []arr={1,2,3,2,42545,56};
for(int x:arr)
{
System.out.println(x);
}
打印二维数组时候需要设置一个双重循环
double [][]arr=new double[][]{{1,23,1},{2,3,4}};
for(double []row:arr)
for(double value:row)
{
System.out.println(value);
}
4.数组的拷贝
Java中,允许将一个数组变量拷贝到另一个数组变量。这时两个变量将同时引用同一个数组:
int []arr={1,2,3,2,42545,56};
int []arr1=arr;
arr1[5]=10;
for(int x:arr)
{
System.out.println(x);
}
我们会发现改变数组一个数组,两个数组同时都会改变。如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法
int []arr2= Arrays.copyOf(arr,arr.length);
arr2[5]=0;
for(int x:arr)
{
System.out.println(x);
}
我们可以发现,编辑拷贝后的数组不会对原先数组造成改变。Arrays.copyOf(arr,new_array.length)中的new_array.length为新数组长度,当长度大于原数组时,如果是数值型,额外的部分会赋值为0,如果时boolean型,会被复制为false,如果是对象数组,则会被赋值为null。
5.命令行参数
Java主程序入口总是Public static void main(String [] args){ },这个传入main函数的,字符串args到底是什么?其实是我们用cmd命令行允许Java类时候传入的参数,Java Message -g cruel world此时的args[0]="-g"、args[1]="cruel "、args[2]="world"。
6.数组排序
Arrays类中有对数组排序的方法,Arrays.sort(a)这个方法使用了优化的快速排序算法。
int []arr={12124,42,33,2,42545,56,324,543,52,236,43,6,7,8,67,78};
Arrays.sort(arr);
for(int x:arr)
{
System.out.println(x);
}
7.Arrays类的方法
- static String toString(xxx[]a)
将数组变成一个字符串,类似于[1,2,3,4,5]
- static xxx[ ] copyOf( xxx[ ] arr,int num)
创建一个新数组长度为num,并且把数组arr复制到新数组,返回就是新数组。
- static xxx[ ] copyOfRange(xxx[ ] arr, int start ,int end)
复制arr数组,从下标【start,end)
- static void sort(xxx[ ]arr)
优化的快速排序
- static int binarySearch(xxx[ ],xxx v)
在数组中查找v元素,找到返回下标,没有找到返回-1
- static int binarySearch(xxx[ ],int start, int end,xxx v )
在数组[start,end)范围中查找v,找到返回下标,没找到返回-1
- static void fill(xxx[ ] ,xxx v)
将数组中所有的元素都设为v
- static boolean equals(xxx[ ]a,xxx[ ] b)
当数组a,b大小完全相同,且里面的元素对应相同时,返回True