java.util.Arrays类
java中的java.util.Arrays类是JDK提供的对数组进行操作的工具类,其中包含了数组的常规操作,有排序、填充、查找、打印等内容。
toString方法
Arrays类里的toString方法是静态方法,能够通过类名.方法名的方式进行调用。这里要注意这个方法和Object类里的toString方法的区别,二者虽然名称相同,但是具体的用法是有区别的。Object类中的方法toString方法不是静态方法,没有形式参数,当调用时需要通过对象来进行访问调用。它的返回值类型为String,返回的值调用这个方法的对象所在的类名以及这个对象在堆空间中的地址值。Arrays类中的toString方法需要传入一个数组的值,返回值类型为引用类型,返回的就是传入数组的值,这里的值和通过for循环遍历数组打印出来的值不同,这里的值是用中括号([ ])括起来的,直观上更符合我们对数组的第一印象。
sort方法
sort方法也是Arrays类中的静态方法,它也能过通过类名.方法名的方式进行调用。这个方法的作用为将数组中的元素按照数值的大小从小到大进行排序。这里要注意的是,这里的排序操作不是不是交换数组中索引的位置,而是交换数组中的元素的位置,当进行排序操作后,是将排序后的数组重新赋值给原数组了,所以排序前后同一个索引指向的元素的值不一定相同。并且排序操作并不局限于数字类型,Stringl类型的数据也可以进行排序,但是引用类型的数据,比如数组用这个方法是无法进行排序操作的。如果强制进行排序操作则会提示错误:ClassCastException。表示两个类型间的转换不兼容,无法进行排序中的比较操作。
binarySearch方法
这个方法的调用与前两个方法一致,这个方法用来查找数组中特定元素的值,这里依然要强调的是,因为二维数组甚至多维数组目前暂时无法通过sort方法进行排序,而调用binarySearch方法的前提是必须对数组进行排序操作,因此默认此方法只能对一维数组生效。同时要知道,这个方法之所以要强调排序的原因是它的基层代码逻辑是二分法查找,而二分法查找必须序列进行排序操作。调用次方法查找数组中的某一个元素时,要传入数组名称以及要查找的数组的元素的值,当方法运行后会返回要查找的元素的值在数组中对应的索引,并且如果数组中存在多个同样的元素值,那么它只会返回最小的一个索引。
fill方法
fill翻译为汉语的意思是填充、充满,因此这个方法的执行的结果又叫数组的填充,不过从它的执行结果上来看理解为替换也有可取之处。在这个方法中需要传入三个参数,具体表达为fill(要进行替换的数组名称,替换起始位置的索引,替换结束位置的索引,要替换成的元素)。这个方法的应用有两点需要注意,一是替换区间为: [替换起始位置的索引,替换结束位置的索引 )。可以发现这是一个前闭后开的区间,也就是说进行替换操作时替换结束位置的索引指向的元素不会被替换,简单概括就是这个方法“包前不包后”。其次还需要注意的是要替换的元素只能输入一个,不能输入好几个元素同时进行替换,比如想将数组d = {50,900,700,200,600,500,400,200}中索引为0和1的两个元素分别替换为100和600,那么就要调用两次fill方法,不能调用一簇方法指定替换区间为[0,3),要替换的对象为100,600。
演示代码
package cn.luoyusanshu.array;
import java.util.Arrays;
/**
* 测试java.util.Arrays类
* 这个类是java提供给我们操纵数组的工具类
* 提供了常见的排序、查找、填充、打印数组内容的相关方法
*/
public class Test04 {
public static void main(String[] args) {
//测试打印
int[] a = {100,200,300};
System.out.println(Arrays.toString(a));
//测试排序
int[] b = {200,500,800,99,150,700,300};
System.out.println(Arrays.toString(b));
System.out.println("______________");
String[] b1 = {"a","c","b"};
Arrays.sort(b1);
System.out.println(Arrays.toString(b1));
System.out.println("________________");
Arrays.sort(b);
System.out.println(Arrays.toString(b));
System.out.println("________________________");
/*int[][] b2 = {a,b};
Arrays.sort(b2);//引用类型无法进行排序
System.out.println(Arrays.toString(b2));*/
//测试二分法查找
int[] c = {50,900,700,200,600,500,400,200} ;
System.out.println(Arrays.toString(c));
Arrays.sort(c);
System.out.println(Arrays.toString(c));
System.out.println("返回元素索引位置:"+Arrays.binarySearch(c,400));
//测试填充
int[] d = {50,900,700,200,600,500,400,200};
System.out.println(Arrays.toString(d));
Arrays.fill(d,1,3,100);
System.out.println(Arrays.toString(d));
}
}