這兩個類都包含了很多用來操作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);
}
結果:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzgjN4EDN1kTM4AjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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 <T> List<T> 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與指定的數組作為源的指定範圍 |
注:
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()+" ");
}
結果: