java中Arrays类常用方法整理
Arrays是什么
Arrays类位于 java.util 包中,主要包含了操纵数组的各种函数
Arrays中的常用函数
1.Arrays.sort(int[] a,int fromIndex,int toIndex)
这里的数组a可以是任何类型,这里拿int型举例。
(1)void Arrays.sort(int[] a)
这是最简单的用法
作用:将数组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
(2) void Arrays.sort(int[] a,int fromIndex,int toIndex)
作用:将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。
(3)void Arrays.sort(T[] a,Comparator<? super T> c)
暂时没有研究Comparator之类的,日后补充。
2.Arrays.binarySearch(int[] a,int key,int fromIndex,int toIndex)
(1)int Arrays.binarySearch(int[] a,int key)
用二分查找法查找一个已排序的数组(未排序的数组有时候找的到有时候找不到,学过数据结构二分查找的应该明白)的元素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的原因是二分查找首先从中间开始查找。若想详细了解可以看这篇博文:二分查找(折半查找)
(2)int Arrays.binarySearch(int[] a,int key,int fromIndex,int toIndex)
与之前的void Arrays.sort(int[] a,int fromIndex,int toIndex)类似,只是加入了起始点和结束点,其他都与int Arrays.binarySearch(int[] a,int key)相同,这里不再赘述。
(3)int Arrays.binarySearch(T[] a,Comparator<? super T> c)
与之前相同的原因,有时间补上。
写这一段的时候学习了这一篇博文Java之数组查询Arrays类的binarySearch()方法详解,在这里表示感谢。
3.List Arrays.asList(String[] args)
作用是将数组转换为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.add(),remove()等方法。当数组更改时,List会随之更改。
示范代码: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
浅谈Arrays.asList()方法的使用
千万不要这样使用Arrays.asList !
4.Arrays.fill(object a[],int fromIndex,int toIndex,int val)
(1)void Arrays.fill(object a[],int val)
将数组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
(2)void Arrays.fill(object a[],int fromIndex,int toIndex,int val)
用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
5.boolean Arrays.equals(object[] a,object[] b)
比较数组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的区别及理解
6.String Arrays.toString(object[] a)
将数组a转化为字符串。
示范代码:
int[] a={1,2,3,4};
System.out.println(Arrays.toString(a));
输出:
[1, 2, 3, 4]
7.String Arrays.deepToString(Object[][] a)
将多维数组转化为字符串。
示范代码:
int[][][] a={{{5}},{{3}},{{1}}};
System.out.println(Arrays.deepToString(a));
输出:
[[[5]], [[3]], [[1]]]
8.Arrays.copyOf(T[] a,int newlength)
从开头复制数组a,长度为newlength.
示范代码:
int[] a={1,2,3};
System.out.println(Arrays.toString(Arrays.copyOf(a, 2)));
输出:
[1, 2]
9.Arrays.copyOf(T[] a,int from,int to)
复制数组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
上一篇: 细说Springcloud eureka的几种主动下线服务的方式
下一篇: Arrays 的使用