java 編程思想 第十六章 Arrays的相關操作

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;

public class Ans {
    public static void main(String[] args) {
        class A {
            @Override
            public String toString() {
                return "A{" +
                        "i=" + i +
                        '}';
            }

            int i = 9;
        }
        A []a = new A[10], b = new A[4];
        Arrays.fill(a,new A());
        System.arraycopy(a,0,b,1,3);
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));

        a[1].i = 11;
        System.out.println(Arrays.toString(a));
        System.out.println(Arrays.toString(b));
        //這裏我們發現Arrays.copy和System.arrayCopy居然都是淺拷貝


        //Arrays.equals 對基本類型如int,使用包裝後的類如Integer的equals


        //關於Arrays.sort
        class X implements Comparable<X> {      //第一種方式是需要比較的類實現Comparable
            X(int x,int y) {i = x; j = y; }
            @Override
            public int compareTo(X o) {
                return i-o.i;                   //這裏如果小於比較對象返回負值
            }

            @Override
            public String toString() {
                return "X{" +
                        "i=" + i +
                        ", j=" + j +
                        '}';
            }

            int i = 10;
            int j;
        }
        X []x = {new X(1,100),new X(10,1),new X(-1,-1)};
        Arrays.sort(x);
        System.out.println(Arrays.toString(x));


        class XComparator implements Comparator<X> {            //第二種方式,如果原類沒有實現Comparable,或是我們不想用實現的Comparable,就可以使用策略設計模式,設計一個實現了Comparator的比較工具類

            @Override
            public int compare(X o1, X o2) {
                return o1.j-o2.j;
            }
        }
        Arrays.sort(x,new XComparator());
        System.out.println(Arrays.toString(x));


        //sort對基本型使用快排,對引用型使用穩定排序,這是一個細節


        //在未排序的數組上使用binary_search結果是不可預測的
        //binary_search在查找具有相同值的數組時,不能保證返回的是相同值中的哪一個
        Arrays.sort(x);
        System.out.println(Arrays.binarySearch(x,new X(3,3)));      //查找成功返回索引,查找失敗返回  -(插入點)-1,插入點爲第一個大於查找值的元素的位置
        Arrays.sort(x,new XComparator());
        System.out.println(Arrays.binarySearch(x,new X(3,0),new XComparator()));        //如果需要傳入Comparator,需要作爲第三個參數
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章