在 Java 泛型出現以前,只有數組能夠用來存儲指定類型的對象;在自動裝箱機制出現以前,只有數組能夠用來存儲基本數據類型;也就是說,在泛型和自動裝箱機制出現以前,數組在 Java 當中的份量舉足輕重。html
何況數組仍是一種效率最高的存儲和隨機訪問對象序列的方式,但遺憾的是,數組的長度是固定的——舉個例子,建立它的時候指定長度是 6,就只能存儲 6 個元素,當你想放第 7 個元素時,是沒法作到的。java
隨着計算機硬件能力的提高,開發人員在存儲一組數據的時候更願意使用 ArrayList 而不是數組。儘管 ArrayList 內部是經過數組實現的,但與數組相比,它的容量可以自動增加,還有不少數組沒有的特性。能不使用數組就別使用數組,除非要用數組來改善性能問題。程序員
讓咱們來給Java數組下一個明確的定義——數組用來存儲固定長度的同類型元素。數組
示例以下:微信
int[] ints = new int[3]; ints[0] = 1; ints[1] = 2; ints[2] = 3; int ints1[] = new int[3]; int[] ints2 = { 1, 2, 3 };
int[] ints
相較於int ints1[]
是優選的聲明方式, int ints1[]
風格來自於 C/C++ 語言 ,便於 C/C++ 程序員可以快速地理解Java語言。markdown
數組的建立方式有兩種,一種是經過new
關鍵字,同時指定長度,而後經過array[index] = value
的方式賦值;另一種方式是經過{value1, value2, ...}
的方式直接建立並同時賦值。app
最多見的應用以下(日期的佔位符字符串):ide
private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM" };
在使用List和Map的時候,能夠直接經過size()
方法獲取容器的實際大小(長度)。數組也有一個關鍵字length
來獲取大小(長度),但意思大不相同。length
只表示數組所可以容納元素的大小,而並不是數組的實際大小。工具
舉例以下:性能
int[] ints = new int[3]; ints[0] = 1; ints[1] = 2; System.out.println(ints.length); // 輸出3
儘管ints的實際長度爲2,但ints.length
的長度卻爲3——要當心了。
Java的設計者可謂良苦用心,特地爲數組設計了一個專屬工具類——java.util.Arrays
,裏面有幾個經常使用的方法咱們來介紹一下。
1)sort()
sort()
方法用來對數組進行排序,該方法要求數組的元素要實現Comparable接口。若是排序的元素不是String或者基本數據類型,就須要主動實現Comparable接口(基本數據類型和String自己已經實現了Comparable接口)。
示例以下:
String[] strs = {"沉", "默","王", "二"}; Arrays.sort(strs); System.out.println(Arrays.toString(strs)); // 輸出[二, 沉, 王, 默]
sort()
方法排序後的結果就是[二, 沉, 王, 默]。
2)binarySearch()
binarySearch()
方法用來對數組進行二分查找(返回值所在的下標,未找到的話返回-1),調用該方法以前必需要先排序。
示例以下:
String[] strs = {"沉", "默","王", "二"}; Arrays.sort(strs); System.out.println(Arrays.binarySearch(strs, "二")); // 排序後的結果爲[二, 沉, 王, 默] // 二分查找的結果範圍0
因爲sort()
方法排序後的結果爲[二, 沉, 王, 默],因此Arrays.binarySearch(strs, "二")
返回下標值0。
3)asList()
asList()
方法用來將數組轉化成List(ArrayList),源碼以下:
public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
那如何將List轉化成數組呢?經過List的toArray()
方法。可參照下例體驗由數組定義方式不一樣帶來的細微差異。
String[] strs = {"沉", "默","王", "二"}; List<String> list = Arrays.asList(strs); System.out.println(list); // 輸出[沉, 默, 王, 二] String[] strs1 = new String[list.size()]; System.out.println(Arrays.toString(list.toArray(strs1))); // 輸出 [沉, 默, 王, 二] String[] strs2 = new String[5]; System.out.println(Arrays.toString(list.toArray(strs2))); // 輸出 [沉, 默, 王, 二, null] String[] strs3 = new String[1]; System.out.println(Arrays.toString(list.toArray(strs3))); // 輸出 [沉, 默, 王, 二] String[] strs4 = {}; System.out.println(Arrays.toString(list.toArray(strs4))); // 輸出 [沉, 默, 王, 二]
當聲明的數組大小超出List的大小後,toArray()
方法會對轉換後的數組進行補位(null
)。
4)toString()
toString()
方法用來將數組進行字符串格式的輸出([value1, value2, value3, ...]
的格式),源碼以下:
public static String toString(Object[] a) { if (a == null) return "null"; int iMax = a.length - 1; if (iMax == -1) return "[]"; StringBuilder b = new StringBuilder(); b.append('['); for (int i = 0; ; i++) { b.append(String.valueOf(a[i])); if (i == iMax) return b.append(']').toString(); b.append(", "); } }
下一篇:Java 集合類入門篇
微信搜索「*沉默王×××免費視頻**」獲取 500G 高質量教學視頻(已分門別類)。