Arrays及Array,這兩個類都包含了很多用來操作Java數組的靜態函數,分別定義如下:
public final class Array
extends Object
public class Arrays
extends Object
二者區別:
Array Arrays
Array類提供靜態方法來動態創建和訪問Java數組。
Array允許在獲取或設置操作期間擴大轉換(方法為使用現有的數組新建一個更大的數組),但如果發生縮小轉換,則拋出IllegalArgumentException 。
該類包含用於操作數組的各種方法(如排序和搜索)。 該類還包含一個靜態工廠,可以將數組視為列表。
如果指定的數組引用為空,則該類中的方法都拋出一個NullPointerException
先復習一下數組的基本知識:
int[] ints=new int[5] //此時虛擬機在在內存上申請了一段單位大小四個字節,長度為5的連續內存,並將元素初始化為0;
(數組可以先聲明再初始化,一旦初始化后,數組的長度便不可更改)常用數組的默認值如下:
public static void main(String[] args) {
int[] ints = new int[1];
for (int i : ints) System.out.println(i);
float[] floats = new float[1];
for (float f : floats) System.out.println(f);
char[] chars=new char[1];
chars[0]=72;
for(char c:chars) System.out.println(c);
boolean[] booleans=new boolean[1];
for(boolean b:booleans) System.out.println(b);
String[] strings=new String[1];
for(String s:strings) System.out.println(s);
}
結果:

Array:
static Object newInstance(Class componentType, int length) 創建具有指定組件類型和長度的新數組
static Object get(Object array, int index) 返回指定數組對象中的索引組件的值。
static int getInt(Object array, int index) 返回指定數組對象中的索引組件的值,如 int
static void set(Object array, int index, Object value) 將指定數組對象的索引組件的值設置為指定的新值。
static void setBoolean(Object array, int index, boolean z) 將指定數組對象的索引組件的值設置為指定的 boolean值。
代碼示例:(其中用到反射知識,參考我的博文:https://blog.csdn.net/qq_42013035/article/details/103362162)
public static void main(String[] args) {
int[] ints=new int[5];
Arrays.fill(ints,3);//初始填充3
System.out.println("length:"+ints.length);
for(int i:ints) System.out.print(i+" ");
int[] ints1= (int[]) Array.newInstance(ints.getClass().getComponentType(),10);//新建一個元素類型為int,長度為10的數組
System.arraycopy(ints,0,ints1,0,ints.length);
System.out.println("\nlength:"+ints1.length);
for(int i:ints1) System.out.print(i+" ");
System.out.println("\n"+Array.get(ints,3));
}
結果:

Arrays:
Arrays是操作數組的工具類,它的功能相比Array更加強大(也可以說是對Array功能的豐富,二者皆有用武之地),在jdk1.2版本發布。
static List asList(T... a) 返回由指定數組支持的固定大小的列表。
static boolean deepEquals(Object[] a1, Object[] a2) 如果兩個指定的數組彼此 深度相等 ,則返回 true
static int deepHashCode(Object[] a) 根據指定數組的“深度內容”返回哈希碼
static void fill(int[] a, int val) 將指定的int值分配給指定的int數組的每個元素。
static void fill(int[] a, int fromIndex, int toIndex, int val) 將指定的int值分配給指定的int數組的指定范圍的每個元素
static int hashCode(int[] a) 根據指定數組的內容返回哈希碼
static int binarySearch(int[] a, int key) (加一個范圍參數) 使用二叉搜索算法搜索指定值的位置,沒有則返回負
static int[] copyOfRange(int[] original, int from, int to) 將指定數組的指定范圍復制到新數組中。
static void sort(int[] a) 按照數字順序排列指定的數組
static void sort(Object[] a) 對指定對象升序排列的陣列,根據natural ordering的元素
static void sort(int[] a, int fromIndex, int toIndex) 按升序排列數組的指定范圍
static String toString(int[] a) 返回指定數組的內容的字符串表示形式
static IntStream stream(int[] array, int startInclusive, int endExclusive) 返回順序IntStream與指定的數組作為源的指定范圍
注:鄭州人流醫院 http://www.120zzzzyy.com/
1.sort()默認使用的是MergeSort(歸並排序),可以自定義其他的算法,但它必須是穩定的
2.當時用binarySearch時,數組一定要是有序的,因為二叉樹搜索算法用到了二分法
3.sort(Object[] a) 按照的是字符的自然順序排列的
代碼示例:
public static void main(String[] args) {
int[] ints={2,4,3,1,9,6,5,4};
System.out.println("inst length:"+ints.length);
System.out.println(Arrays.toString(ints));
int[] ints1=Arrays.copyOf(ints,10);//莫名感覺它比Array里的newInstance厲害哈哈哈
System.out.println("ints1 length"+ints1.length);
System.out.println(Arrays.toString(ints1));
System.out.println("ints1's hashcode:"+Arrays.hashCode(ints1));
Arrays.sort(ints);
System.out.println("after sort by Arrays:");
System.out.println(Arrays.toString(ints));
System.out.println("binarySearch result is "+Arrays.binarySearch(ints,9));
System.out.println(Arrays.toString(ints));
/*
引用類型數據數組
*/;
String[] strings={"hello","world","who","are","you"};
System.out.println(Arrays.toString(strings));
System.out.println("deep hashcode:"+Arrays.deepHashCode(strings));
Arrays.sort(strings);
System.out.println(Arrays.toString(strings));
List list=Arrays.asList(1,1,2,2,3);//使用將數量較少的元素快速轉換成對應的集合
System.out.println(list.size());
Iterator iterator=list.iterator();
while (iterator.hasNext()) System.out.print(iterator.next().toString()+" ");
}
從而得出結果。