Java工具类Arrays
一.常用方法
1.
static int[] | copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。 |
static int[] | copyOf(int[] original, int newLength) 复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。 |
static int | binarySearch(int[] a, int key) 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。 |
static void | fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组的每个元素。 |
static void | fill(int[] a, int fromIndex, int toIndex, int val) 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。 |
static String | toString(int[] a) 返回指定数组内容的字符串表示形式。 |
static void | sort(int[] a) 对指定的 int 型数组按数字升序进行排序。 |
static void | sort(int[] a, int fromIndex, int toIndex) 对指定 int 型数组的指定范围按数字升序进行排序。 |
import java.util.*;
public class Main
{
public static void main(String[] args){
//底层逻辑就是用Stringbuilder写的
System.out.println("toString-----------------");
int [] arr = {1,2,3,4,5,6,7};
System.out.println(Arrays.toString(arr));
//binarySearch搜索key返回其索引值
System.out.println("binarySearch-----------------");
int result = Arrays.binarySearch(arr, 5);//搜索5返回其索引值
System.out.println(result);
//copyOf
//第一个参数:老数组
//第二个参数:新数组长度
//新数组更长会补上默认值
System.out.println("copyof-----------------");
int[] newArray = Arrays.copyOf(arr, arr.length+1);
for (int i = 0; i < newArray.length; i++) {
System.out.print(newArray[i]+" ");
}
//copyOfRange指定数组范围,范围包头不包尾
System.out.println("\n"+"copyOfRange-----------------");
int[] newArray2 = Arrays.copyOfRange(arr, 0, 5);//包含0索引不包含5索引
for (int i = 0; i < newArray2.length; i++) {
System.out.print(newArray2[i]+" ");
}
//fill自动填充
System.out.println("\n"+"fill-----------------");
Arrays.fill(newArray, 10);
System.out.println(Arrays.toString(newArray));//[10, 10, 10, 10, 10, 10, 10, 10]
//sort自动排序
int[] newArray3 = {2,5,7,6,1,3,4,0};
Arrays.sort(newArray3);
System.out.println(Arrays.toString(newArray3));//[0, 1, 2, 3, 4, 5, 6, 7]
}
}
二.关于sort的进阶用法
package hiema.Day21;
import java.util.*;
public class A_sort2 {
public static void main(String[] args) {
//public static void sort(数组,规则);
//第一个参数是要排序的数组、
//第二个是排序的规则
//只能给引用数据类型排序,所以基本数据类型要变成包装类
Integer[] arr = {5,1,3,4,2};
//第2个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。
//但是这个实现类,我只要使用一次,所以就没有必要单独的去写一个类,直接采取匿名内部类的方式就可以
Arrays.sort(arr,new Comparator<Integer>() {
@Override
public int compare(Integer o1 ,Integer o2){
System.out.println("--------------");
System.out.println("o1:" + o1);
System.out.println("o2:" + o2);
return o2-o1;
}
});
// //底层原理:
// 利用插入排序 + 二分查找的方式进行排序的。
// 默认把0索引的数据当做是有序的序列,1索引到最后认为是无序的序列。
// 遍历无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素
// 把A往有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点。
//拿着A元素,跟插入点的元素进行比较,比较的规则就是compare方法的方法体
//如果方法的返回值是负裁,拿着A继续跟前面的数据进行比较
//如果方法的返回值是正数,拿着A继续跟后面的数据进行比较
//如果方法的返回值是0,也拿着A继续跟后面的数据进行比较
//直到能确定A的最终位置为止。
//compare方法的形式参数:
//参数一 o1: 表示在无序序列中,遍历得到的每一个元素
//参数二 o2: 有序序列中的元素
//返回值:
//负数:表示当前要插入的元素是小的,放在前面
//正数:表示当前要插入的元素是大的,放在后面
//0:表示当前要插入的元素跟现在的元素比是一样的们也会放在后面
//所以,o1-o2是升序,o2-o1是降序!!!!!!!!!!!!!!!!!!!!
System.out.println(Arrays.toString(arr));
}
}
这里的Integer也可以改变成别的类,Student,Class,Teacher等等,排序也可以改成
return stu1.getJavaScore() – stu2.getJavaScore();