章13——包装类——Arrays类

1、包含了一系列静态方法,用于管理或操作数组(如排序、搜素)

因为是引用类型,sort方法后会直接印象到原数据。

import java.util.Arrays;
import java.util.Comparator;

public class Math {
    public static void main(String[] args) {
        Integer arr[] = {1,2,3,2,1};
        Arrays.sort(arr, new Comparator(){
            @Override
            public int compare(Object o1, Object o2) {
                Integer i1 = (Integer) o1;
                Integer i2 = (Integer) o2;
                //从小到大,反之从大到小
                return i1 - i2;
            }
        });
    }
}

compare return 的数字大于0还是小于0会直接影响排序是从大到小还是从小到大。


下列函数用于理解:

public class ArraysSortCustom {
    public static void main(String[] args) {
        int[] arr = {1,4,2,55,3,6,8,3,74,6,3,6};
        bubble01(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                int i1 = (Integer) o1;
                int i2 = (Integer) o2;
                return i1 - i2;//相当于 aj > aj+1 时才会交换。
            }
        });

    }

    public static void bubble01(int[] arr, Comparator c){
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if(c.compare(arr[j],arr[j+1]) > 0){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
}

有序数组的查找:

int index = Arrays.binarySearch(arr,123);

如果找不到返回

return -(low + 1);
//本应该在的位置 +1,再取负数。

aslist.getClass() 获得运行类型

课堂练习:给书按照价格大小排序,并打印

import java.util.Arrays;
import java.util.Comparator;

public class ArrayExercise {
    public static void main(String[] args) {
        Book[] books = new Book[4];
        books[0] = new Book("红楼梦",100);
        books[1] = new Book("金*瓶.梅",90);
        books[2] = new Book("青年文摘",5);
        books[3] = new Book("java从入门到放弃",300);
        Arrays.sort(books, new Comparator<Book>() {
            @Override
            public int compare(Book o1, Book o2) {
                double res =o2.getPrice() - o1.getPrice();
                if(res > 0){
                    return 1;
                }else if(res < 0){
                    return -1;
                }else {
                    return 0;
                }
            }
        });
        System.out.println(Arrays.toString(books));
    }

}

class Book{
    private String name;
    private double price;

    public Book(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }
    
    @Override
    public String toString() {
        return name + " " + price + " ";
    }
}

System.out.println(Arrays.toString(books));
以上可以打印数组,内容里的books数组的类需要重写
toString 方法。

posted @ 2024-09-18 20:06  gknives  阅读(3)  评论(0编辑  收藏  举报