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,需要作爲第三個參數
}
}