Arrays类中有很多实用与数组的static方法:
    1.equals()用于比较两个数组是否相等(deepEquals()用于多维数组)
    2.fill();用于快速在数组中填充数据
    3.sort():对数组排序
    4.hinarySearch():在已经拍好的数组中查找元素
    5.toString():产生数组的String表示
    6.hashCode()产生数组的散列码
    7.asList()接受任意的序列或数组将其转变为LIst集合;
    1.数组复制;
    System.arraycopy()针对所以的类型做了重载,用于复制数组。同时原数组的数据不会丢失。

    1. package com.package16;
    2. import java.util.Arrays;
    3. public class CopyArrayDemo {
    4. public static void main(String[] args) {
    5. int [] i1=new int[7];
    6. int [] i2=new int[10];
    7. Arrays.fill(i1,47);
    8. Arrays.fill(i2,99);
    9. System.out.println(Arrays.toString(i1));
    10. System.out.println(Arrays.toString(i2));
    11. System.out.println("将i1的数组赋值到i2中后:");
    12. System.out.println("被复制后的i1"+Arrays.toString(i1));
    13. System.out.println(Arrays.toString(i1));
    14. System.out.println("复制后的i2"+Arrays.toString(i2));
    15. int[] k=new int[5];
    16. Arrays.fill(k,11);
    17. System.out.println("复制前的k"+Arrays.toString(k));
    18. System.arraycopy(i1,0,k,0,k.length);
    19. System.out.println("复制后的k"+Arrays.toString(k));
    20. }
    21. }
    1. System.arraycopy()有个参数:
    2. 1.源数组:需要复制的数组,后跟开始位置
    3. 2.目标数组:后跟开始位置
    4. 3.赋值长度

    2.数组的比较
    Arrays提供了重载后的equals方法(),用来比较整个数组。数组相等的条件是元素个数比较相等,对于位置的元素也要相等。对于基本类型的比较,使用的是对应的包装类型中重写的equals方法

    1. package com.package16;
    2. import java.util.Arrays;
    3. public class ComparingArrays {
    4. public static void main(String[] args) {
    5. int [] arrays1=new int[10];
    6. int [] arrays2=new int[10];
    7. Arrays.fill(arrays1,11);
    8. Arrays.fill(arrays2,11);
    9. System.out.println(Arrays.equals(arrays1, arrays2));
    10. arrays2[3]=13;//改变任意一个位置的元素
    11. System.out.println("修改arrays2中的一个元素后"+Arrays.equals(arrays1, arrays2));
    12. arrays2=new int[11];//改变数组长度后
    13. System.out.println("修改arrays2中的数组长度后:"+Arrays.equals(arrays1, arrays2));
    14. String[]str1=new String[4];
    15. Arrays.fill(str1,"hi");
    16. String[]str2={new String("hi"),new String("hi"),new String("hi"),new String("hi")};
    17. System.out.println("str1 和 str2比较"+Arrays.equals(str1, str2));
    18. }
    19. }

    3.策略设计模式
    在排序中经常遇到,可以报一种不变的排序算法抽出来,用来去比较各种对象
    3.1 抽出排序算法

    1. package com.package16;
    2. import java.util.Arrays;
    3. public class ComTypeDemo implements Comparable<ComTypeDemo>{
    4. int i;
    5. ComTypeDemo(int i){
    6. this.i=i;
    7. }
    8. @Override
    9. public int compareTo(ComTypeDemo o) {
    10. return i-o.i;//从小到大排序
    11. }
    12. @Override
    13. public String toString() {
    14. return "ComTypeDemo"+ i;
    15. }

    3.2对不同的对象进行比较

    1. public static void main(String[] args) {
    2. ComTypeDemo [] comTypeDemos={new ComTypeDemo(6),new ComTypeDemo(3),new ComTypeDemo(4),new ComTypeDemo(2)};
    3. System.out.println(Arrays.toString(comTypeDemos));
    4. Arrays.sort(comTypeDemos);
    5. System.out.println(Arrays.toString(comTypeDemos));
    6. }

    4.数组的排序
    4.1排序
    ①使将要排序的类实现comparable接口中的comparato方法,让这个类自身带有排序

    1. public class ComTypeDemo implements Comparable<ComTypeDemo>{
    2. int i;
    3. ComTypeDemo(int i){
    4. this.i=i;
    5. }
    6. @Override
    7. public int compareTo(ComTypeDemo o) {
    8. return i-o.i;
    9. }
    10. @Override
    11. public String toString() {
    12. return "ComTypeDemo"+ i;
    13. }
    14. public static void main(String[] args) {
    15. ComTypeDemo [] comTypeDemos={new ComTypeDemo(6),new ComTypeDemo(3),new ComTypeDemo(4),new ComTypeDemo(2)};
    16. System.out.println(Arrays.toString(comTypeDemos));
    17. Arrays.sort(comTypeDemos);
    18. System.out.println(Arrays.toString(comTypeDemos));
    19. }
    20. }

    注意:所有的包装类型都实现了comparable接口,所以他们自身都带排序

    1. Integer []integers=new Integer[5];
    2. integers[0]=45;
    3. integers[1]=15;
    4. integers[2]=35;
    5. integers[3]=5;
    6. integers[4]=85;
    7. System.out.println(Arrays.toString(integers));
    8. Arrays.sort(integers);
    9. System.out.println(Arrays.toString(integers));
    10. Output:
    11. [45, 15, 35, 5, 85]
    12. [5, 15, 35, 45, 85]


    ②在不修改代码的前提下,添加类实现comparator接口中的compara方法,从而对目标进行排序

    创建排序类

    1. public class ComparatorDemo implements Comparator<Student> {
    2. @Override
    3. public int compare(Student o1, Student o2) {
    4. return o1.age-o2.age;
    5. }
    6. }
    1. 不修改student类对其进行排序
    1. public class Student {
    2. private String name;
    3. public int age;
    4. Student(String name,int age){
    5. this.name=name;
    6. this.age=age;
    7. }
    8. @Override
    9. public String toString() {
    10. return name+":"+age+" ";
    11. }
    12. public static void main(String[] args) {
    13. Student[] students = {new Student("AA", 12), new Student("BB", 13), new
    14. Student("cc", 10)};
    15. System.out.println(Arrays.toString(students));
    16. Arrays.sort(students, new ComparatorDemo());
    17. System.out.println(Arrays.toString(students));
    18. Output:
    19. [AA:12 , BB:13 , cc:10 ]
    20. [cc:10 , AA:12 , BB:13 ]

    4.2在排序好的数组中查找
    对于已经排序过的数组我们可以使用Arrays.binarySearch方法快速查找某个元素的索引,如果该数组没有进行排序,那么该发放便无任何作用

    1. public static void main(String[] args) {
    2. Integer []integers=new Integer[5];
    3. integers[0]=45;
    4. integers[1]=15;
    5. integers[2]=35;
    6. integers[3]=5;
    7. integers[4]=85;
    8. System.out.println(Arrays.toString(integers));
    9. System.out.println("未排序"+Arrays.binarySearch(integers, 15));
    10. Arrays.sort(integers);
    11. System.out.println(Arrays.toString(integers));
    12. System.out.println("排序后"+Arrays.binarySearch(integers, 15));
    13. }
    14. OUtput:
    15. [45, 15, 35, 5, 85]
    16. 未排序-1
    17. [5, 15, 35, 45, 85]
    18. 排序后1
    1. 我们发现只有排序后查找的元素索引才正确。