1.数组声明以及初始化
Object[ ] a =new Object[n];
a[n]=xn;
或
Object[] a={x1,x2,x3....xx};
数组的长度: a.length;
2.Array API
提供:动态创建以及访问数组的方法。
(1)Object object = Array.get(array,n);
返回该数组该索引位的一个Object对象。
int[] a=new int[10];
a[0]=1;
Object b=Array.get(a,0);
System.out.print(b);
//结果:1
(2)类型 xx = Array.get类型(array,n);
类型:基本类型(四类八种)。
返回该数组该索引位该类型的一个对象。
int[] a=new int[10];
a[0]=1;
int c=Array.get(a,0);
System.out.print(c);
//结果:1
(3)int n = Array.getLength(array);
返回指定array的数组长度。
int[] a=new int[10];
int f=Array.getLength(a);
//<=等同于=> int f=a.length;
System.out.print(f);
(4)Object object = Array.newInstance(类型,长度); 或 Object object =Array.newInstance(类型,维度数组);
创建一个具有指定类型的、指定长度or维度的的新数组。调用前者方法等效于后者创建如下数组:
int[] x = {length};
Array.newInstance(componentType, x);
//若X的值为{1},则长度为1;
//若x的值为{1,2},则表示是二维数组,维度X、Y分别为1和2
(5)set(Object array,int index,object value);
在指定数组的指定索引位放入指定的Object值。
(6)set类型(Object array,int index,类型 value);
类型:基本类型(四类八种)
在指定数组的制定所因为放入指定类型的值。
3.Arrays API
提供:操作非空数组的方法,例如:排序、搜索····且包含了一个允许将数组作为列表来查看的静态工厂。
注:该API下所有方法的数组都不能为null,否则会报NullPointerException异常。
(1)List<引用类型/包装类型> list = Arrays.asList(引用类型/包装类型array);
返回一个由指定数组生成的固定大小的 List。生成的List不允许被修改!(底层代码显示:所有元素存储在一个final类型的数组里!)
注意:类型要用包装类型或者是引用类型,因为Array的指定类型需有class属性,而基本类型不存在该属性。即:参数必须是对象或者对象数组,而基本类型不是对象。若想用基本类型需要转换成包装类型来使用。
正确例子:
Integer[] x1 = {1,2,3};
List<Integer> list = Arrays.asList(x1);
//等同于
List<Integer> list = Arrays.asList(1,2,3);
log.info("list的长度:"+list.size());
结果:list的长度:3
错误代码段:
int[] array={1,2,3};
List<int> list=Arrays.asList(array);
log.info("list的长度:"+list.size());
//结果:list的长度:1
//存在list里的只有一个array数组(因为array是个对象),而不是数组里的元素(元素都是基本类型,基本类型不是对象)。
若想将转换后的List改成可修改大小的List,则需要转换一下:
//错误示范:
//抛出UnsupportedOperationException异常
Integer[] array = {1,2,3};
List<Integer> list = Arrays.asList(array);
list.add(4);
//正确示范:
Integer[] array = {1,2,3};
List<Integer> list = new ArrayList<Integer>(Arrays.asList(array));
list.add(4);
等同于不用API自己将array转换成List:
int[] a={1,2,3};
List<int> list = new ArrayList<int>();
for(int x : list){
list.add(x);
}
(2)Arrays.sort(类型[ ] array,int index1,int index2);
(索引位可忽略,包括index1,不包括index2)
1.若类型为:基本类型/包装类型,则是对指定类型的数组里的进行数字升序排序。
2.若类型为:引用类型或对象,则是对指定对象的数组进行升序排序,前提:必须可以比较。
(前者:a.compareTo(b)不得抛出ClassCastException异常,后者c.compare(e1, e2) 不得抛出 ClassCastException异常。)int
int[] a={14,35,77,68,334,22,54,111,46,76};
Arrays.sort(a);
for(int x:a){
System.out.print(x+",");
}
结果:14,22,35,46,54,68,76,77,111,334,
(3)int a = Arrays.binarySearch(类型[ ] array,int index1,int index2,类型 key);
(索引位可以忽略,包括index1,不包括index2)
使用二分搜索法来搜索指定的类型数组,以获得指定的值。
注:调用前必须对数组进行sort排序。
类型:可以为基本类型(除boolean)以及引用类型。
int[] a={14,35,77,68,334,22,54,111,46,76};
Arrays.sort(a);
for(int x:a){
//升序后数组
System.out.print(x+",");
}
System.out.println();
int f=Arrays.binarySearch(a,111);
//索引位 若查到则为对应索引位,若没查到则为-1
System.out.print(f);
结果:14,22,35,46,54,68,76,77,111,334,
8
(4)Arrays.fill(类型[ ] ,int index1,int index2,类型 x);
(索引值可忽略,包括index1,不包括index2)
将x填充到数组中对应索引位里的所有元素。
int[] a={14,35,77,68,334,22,54,111,46,76};
Arrays.fill(a,1);
for(int x:a){
System.out.print(x+",");
}
结果:1,1,1,1,1,1,1,1,1,1,