Arrays类位于 java.util 包中,主要包含了操纵数组的各种函数
这里的数组a可以是任何类型,这里拿int型举例。
这是最简单的用法
作用:将数组a升序排序。
示范代码:
int[] a={1,5,9,8,6,3,7,4,2,10};
Arrays.sort(a);
for(int i:a){
System.out.print(i+" ");
}
输出:
1 2 3 4 5 6 7 8 9 10
作用:将fromIndex与toIndex之间的元素进行排序。
示范代码:
int[] b={1,5,9,8,6,3,7,4,2,10};
Arrays.sort(b,5,9);
for(int i:b){
System.out.print(i+" ");
}
输出:
1 5 9 8 6 2 3 4 7 10
排序数组a第fromIndex个到第toIndex个元素之间的元素(包含第toIndex个,不包含第fromIndex个)。上面的3、7、4、2,变为了2、3、4、7。
暂时没有研究Comparator之类的,日后补充。
用二分查找法查找一个已排序的数组(未排序的数组有时候找的到有时候找不到,学过数据结构二分查找的应该明白)的元素key。数组a和元素key可以是double等其他类型。binarySearch的返回值有以下四种情况:
搜索值不是数组元素,且在数组范围内,从1开始计数,得“ - 插入点索引值”
示范代码:
int[] a={1,6,8,10,12};
int position2=Arrays.binarySearch(a, 11);
System.out.println("position2:"+position2);
输出:
position2:-5
搜索值是数组元素,从0开始计数,得搜索值的索引值
示范代码:
int[] a={1,6,8,10,12};
int position1=Arrays.binarySearch(a, 6);
System.out.println("position1:"+position1);
输出:
position1:1
搜索值不是数组元素,且大于数组内元素,索引值为 – (length + 1)
示范代码:
int[] a={1,6,8,10,12};
int position3=Arrays.binarySearch(a, 13);
System.out.println("position3:"+position3);
输出:
position3:-6
搜索值不是数组元素,且小于数组内元素,索引值为 – 1
示范代码:
int[] a={1,6,8,10,12};
int position4=Arrays.binarySearch(a, 0);
System.out.println("position4:"+position4);
输出:
position4:-1
注意:因为二分查找的特性,若数组中有多个同样的元素,查找到的元素并不是多个同样的元素中的第一个。
示范代码:
int[] b={1,1,1,2,3};
int position=Arrays.binarySearch(b, 1);
System.out.println("position:"+position);
position:2
position值为2的原因是二分查找首先从中间开始查找。若想详细了解可以看这篇博文:二分查找(折半查找)
与之前的void Arrays.sort(int[] a,int fromIndex,int toIndex)类似,只是加入了起始点和结束点,其他都与int Arrays.binarySearch(int[] a,int key)相同,这里不再赘述。
与之前相同的原因,有时间补上。
写这一段的时候学习了这一篇博文Java之数组查询Arrays类的binarySearch()方法详解,在这里表示感谢。
作用是将数组转换为List。
限制:数组类型不能是基本数据类型(byte,short,int,long,float,double,boolean,char)
示范代码:
String a[]={"a","b","c"};
List list=new ArrayList(Arrays.asList(a));
System.out.println("a:"+a);
System.out.println("list:"+list);
输出:
a:[Ljava.lang.String;@6d06d69c
list:[a, b, c]
List list=new ArrayList(Arrays.asList(a));
示范代码:String[] a={"a","b","c"};
List list=new ArrayList(Arrays.asList(a));
System.out.println("list:"+list);
System.out.println("a:"+a);
list.add("ss");
list.remove("a");
System.out.println("list:"+list);
System.out.print("a:");
for(String str:a){
System.out.print(str+" ");
}
list.set(0, "d");
System.out.println("");
System.out.println("list:"+list);
System.out.print("a:");
for(String str:a){
System.out.print(str+" ");
}
输出:a:[Ljava.lang.String;@6d06d69c
list:[a, b, c]
list:[b, c, ss]
a:a b c
list:[d, c, ss]
a:a b c
List list=Arrays.asList(a);
示范代码:String[] a={"a","b","c"};
List list=Arrays.asList(a);
System.out.println("list:"+list);
System.out.print("a:");
for(String str:a){
System.out.print(str+" ");
}
a[0]="d";
System.out.println("");
System.out.println("list:"+list);
System.out.print("a:");
for(String str:a){
System.out.print(str+" ");
}
输出:list:[a, b, c]
a:a b c
list:[d, b, c]
a:d b c
详细了解可以戳将数组a填满int val。
示范代码:
int[] a=new int[10];
Arrays.fill(a,50);
for(int i:a){
System.out.print(i+" ");
}
输出:
50 50 50 50 50 50 50 50 50 50
用val填充数组a第fromIndex个到第toIndex个元素之间的元素(包含第toIndex个,不包含第fromIndex个)。
示范代码:
int[] a=new int[10];
Arrays.fill(a,50);
Arrays.fill(a, 2,5,10);
for(int i:a){
System.out.print(i+" ");
}
输出:
50 50 10 10 10 50 50 50 50 50
比较数组a和数组b的元素值是否相等。
示范代码:
int[] a={1,2,3,4};
int[] b=a;
int[] c={1,2,3,4};
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(Arrays.equals(a, b));
System.out.println("--------------");
System.out.println(a==c);
System.out.println(a.equals(c));
System.out.println(Arrays.equals(a, c));
输出:
true
true
true
--------------
false
false
true
关于==和equals的问题,笔者已经学习过很多遍了,每次想起来还是不知道(笑)
这篇博文我觉得解释得还算不错Java中==与equals的区别及理解
将数组a转化为字符串。
示范代码:
int[] a={1,2,3,4};
System.out.println(Arrays.toString(a));
输出:
[1, 2, 3, 4]
将多维数组转化为字符串。
示范代码:
int[][][] a={{{5}},{{3}},{{1}}};
System.out.println(Arrays.deepToString(a));
输出:
[[[5]], [[3]], [[1]]]
从开头复制数组a,长度为newlength.
示范代码:
int[] a={1,2,3};
System.out.println(Arrays.toString(Arrays.copyOf(a, 2)));
输出:
[1, 2]
复制数组a从第from个到第to个元素(第from个不取,第to个取,与之前的相同)
示范代码:
int[] a={1,2,3,4,5};
System.out.println(Arrays.toString(Arrays.copyOfRange(a, 1,4)));
输出:
[2, 3, 4]
这次将网上常见的Arrays类函数整理了一遍,如有不对的敬请批评指正。
写于2020-01-17 20:09