16、Arrays工具类
Arrays工具类:用来操作数组(比如排序和搜索)的各种方法
常用方法:
使用二分法查找 | Arrays.binarySearch(int[] array,int value); |
数组转成字符串的形式输出 | Arrays.toString(int[] array); |
数组排序 | Arrays.sort(int[] array); |
复制指定的数组 | Arrays.copyOf(int[] array,int length);(这个括号里第一个是源数组数组,第二个是新数组长度) Arrays.copyOfRange(int[] array,int from,int to);(这个括号里第一个是源数组,后两个是截取数组的下标) System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length );
|
判断两个数组是否相等 | Array.equals(int[] array1,int[] array2); |
使用制定元素填充数组 | Array.fill(int[] array,int x); |
比如我们用Arrays的二分法查找数组元素下标20和100:
import java.util.Arrays;//使用Arrays类的时候要把Arrays类引入,Arrays类在java.util里,别忘加英文分号
public class a
{
public static void main(String[] args)
{
int[] num = {10, 20, 50, 65, 88, 90};
int key1 = Arrays.binarySearch(num, 20);//记住,如果找到这个数字,返回的就是数字的下标,找不到,返回一个负数
int key2 = Arrays.binarySearch(num, 100);
System.out.println("找到20的下标是:"+key1+"\t100的下标是:"+key2);
}
}
我们想找Java.util.Arrays,首先进到jdk1.8.0_192(我下载的jdk是这个版本,后面会有新的版本),解压src.zip,出现java文件夹,打开后里面有util文件夹,再打开,里面有Arrays.java,用Notepad++打开,按ctrl+F,搜索binarySearch,可以找到这个方法,但是这个方法又调用了binarySearch0的方法,点查找下一个6次左右会出现方法画面,与32的方法如出一辙。
1、
2、找到这个(ctrl+F,输入binarySearch)
3、再那里面输入binarySearch0,找3次,就可以看见方法了
再看数组转成字符串形式输出:
import java.util.Arrays;//使用Arrays类的时候要把Arrays类引入,Arrays类在java.util里,别忘加英文分号
public class a
{
public static void main(String[] args)
{
int[] num = {10, 65, 86, 20, 50, 90};
String n = Arrays.toString(num);
System.out.print(n);
}
}
/*输出情况:
[10, 65, 86, 20, 50, 90]
*/
//这个方法在输出测试数组时可以使用,更加方便
找Arrays.toString(int[] num);与上面找Arrays.binarySearch(int[] num,int key);一样。
然后是排序:
import java.util.Arrays;//使用Arrays类的时候要把Arrays类引入,Arrays类在java.util里,别忘加英文分号
public class a
{
public static void main(String[] args)
{
int[] num = {10, 65, 86, 20, 50, 90};
Arrays.sort(num);//这个排序是快速排序
System.out.print(Arrays.toString(num));
}
}
//这个方式只能这样写,Arrays.sort();返回值是void(空),Arrays.toString(这里不能是空);,所以Arrays.toString(Arrays.sort(num));是不对的
数组的复制:
//第一种方法:
import java.util.Arrays;
public class a
{
public static void main(String[] args)
{
int[] num = {10, 65, 86, 20, 50, 90};
int[] num2 = Arrays.copyOf(num , 10);
System.out.println(Arrays.toString(num2));
}
}
/*结果:
[10, 65, 86, 20, 50, 90, 0, 0, 0, 0]
*///整数默认值是0
//第二种方法:
import java.util.Arrays;
public class a
{
public static void main(String[] args)
{
int[] num = {10, 65, 86, 20, 50, 90};
int[] num2 = Arrays.copyOfRange(num , 2 ,10);
System.out.println(Arrays.toString(num2));
}
}
//这里也可以“溢位复制”
/*结果:
[86, 20, 50, 90, 0, 0, 0, 0]
*/
//第三种方法:
import java.util.Arrays;
public class a
{
public static void main(String[] args)
{
int[] num = {10, 65, 86, 20, 50, 90};
int[] newNum = new int[num.length];
System.arraycopy(num, 1, newNum, 3, 3);//这个返回值是void
System.out.println(Arrays.toString(newNum));
}
}
/*结果为:
[0, 0, 0, 65, 86, 20]
*/
/*首先num有6个元素拷贝从num开始,从下标1的元素开始,复制到newNum的第3个元素开始复制,复制3个数。*/
小结:数组复制,由高到低为:System.arraycopy() > Arrays.copyOf() > for 。
判断两个数是否相等:
import java.util.Arrays;
public class a
{
public static void main(String[] args)
{
int[] num1 = {10, 65, 86, 20, 50, 90};
int[] num2 = {10, 65, 86, 20, 50, 90};
int[] newNum = new int[num1.length];
System.arraycopy(num1, 1, newNum, 3, 3);
System.out.println(Arrays.equals(num1, newNum));
System.out.println(Arrays.equals(num1, num2));
}
}
/*结果:
false
true
*/
填充数组:
import java.util.Arrays;
public class a
{
public static void main(String[] args)
{
int[] num = {10, 65, 86, 20, 50, 90};
int[] newNum = new int[num.length];
System.arraycopy(num, 1, newNum, 3, 3);
System.out.println(Arrays.toString(newNum));
Arrays.fill(newNum, 5);
System.out.println(Arrays.toString(newNum));
}
}
/*结果:
[0, 0, 0, 65, 86, 20]
[5, 5, 5, 5, 5, 5]
*/