十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
在 Java 泛型出現(xiàn)之前,只有數(shù)組可以用來存儲指定類型的對象;在自動裝箱機(jī)制出現(xiàn)之前,只有數(shù)組可以用來存儲基本數(shù)據(jù)類型;也就是說,在泛型和自動裝箱機(jī)制出現(xiàn)之前,數(shù)組在 Java 當(dāng)中的分量舉足輕重。
況且數(shù)組還是一種效率最高的存儲和隨機(jī)訪問對象序列的方式,但遺憾的是,數(shù)組的長度是固定的——舉個(gè)例子,創(chuàng)建它的時(shí)候指定長度是 6,就只能存儲 6 個(gè)元素,當(dāng)你想放第 7 個(gè)元素時(shí),是無法做到的。
隨著計(jì)算機(jī)硬件能力的提升,開發(fā)人員在存儲一組數(shù)據(jù)的時(shí)候更愿意使用 ArrayList 而不是數(shù)組。盡管 ArrayList 內(nèi)部是通過數(shù)組實(shí)現(xiàn)的,但與數(shù)組相比,它的容量能夠自動增長,還有很多數(shù)組沒有的特性。能不使用數(shù)組就別使用數(shù)組,除非要用數(shù)組來改善性能問題。
讓我們來給Java數(shù)組下一個(gè)明確的定義——數(shù)組用來存儲固定長度的同類型元素。
示例如下:
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[]
是優(yōu)選的聲明方式, int ints1[]
風(fēng)格來自于 C/C++ 語言 ,便于 C/C++ 程序員能夠快速地理解Java語言。
數(shù)組的創(chuàng)建方式有兩種,一種是通過new
關(guān)鍵字,同時(shí)指定長度,然后通過array[index] = value
的方式賦值;另外一種方式是通過{value1, value2, ...}
的方式直接創(chuàng)建并同時(shí)賦值。
最常見的應(yīng)用如下(日期的占位符字符串):
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的時(shí)候,可以直接通過size()
方法獲取容器的實(shí)際大?。ㄩL度)。數(shù)組也有一個(gè)關(guān)鍵字length
來獲取大?。ㄩL度),但意思大不相同。length
只表示數(shù)組所能夠容納元素的大小,而并非數(shù)組的實(shí)際大小。
舉例如下:
int[] ints = new int[3];
ints[0] = 1;
ints[1] = 2;
System.out.println(ints.length); // 輸出3
盡管ints的實(shí)際長度為2,但ints.length
的長度卻為3——要小心了。
Java的設(shè)計(jì)者可謂良苦用心,特意為數(shù)組設(shè)計(jì)了一個(gè)專屬工具類——java.util.Arrays
,里面有幾個(gè)常用的方法我們來介紹一下。
1)sort()
sort()
方法用來對數(shù)組進(jìn)行排序,該方法要求數(shù)組的元素要實(shí)現(xiàn)Comparable接口。如果排序的元素不是String或者基本數(shù)據(jù)類型,就需要主動實(shí)現(xiàn)Comparable接口(基本數(shù)據(jù)類型和String本身已經(jīng)實(shí)現(xiàn)了Comparable接口)。
示例如下:
String[] strs = {"沉", "默","王", "二"};
Arrays.sort(strs);
System.out.println(Arrays.toString(strs));
// 輸出[二, 沉, 王, 默]
sort()
方法排序后的結(jié)果就是[二, 沉, 王, 默]。
2)binarySearch()
binarySearch()
方法用來對數(shù)組進(jìn)行二分查找(返回值所在的下標(biāo),未找到的話返回-1),調(diào)用該方法之前必須要先排序。
示例如下:
String[] strs = {"沉", "默","王", "二"};
Arrays.sort(strs);
System.out.println(Arrays.binarySearch(strs, "二"));
// 排序后的結(jié)果為[二, 沉, 王, 默]
// 二分查找的結(jié)果范圍0
由于sort()
方法排序后的結(jié)果為[二, 沉, 王, 默],所以Arrays.binarySearch(strs, "二")
返回下標(biāo)值0。
3)asList()
asList()
方法用來將數(shù)組轉(zhuǎn)化成List(ArrayList),源碼如下:
public static List asList(T... a) {
return new ArrayList<>(a);
}
那如何將List轉(zhuǎn)化成數(shù)組呢?通過List的toArray()
方法??蓞⒄障吕w驗(yàn)由數(shù)組定義方式不同帶來的細(xì)微差別。
String[] strs = {"沉", "默","王", "二"};
List 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)));
// 輸出 [沉, 默, 王, 二]
當(dāng)聲明的數(shù)組大小超出List的大小后,toArray()
方法會對轉(zhuǎn)換后的數(shù)組進(jìn)行補(bǔ)位(null
)。
4)toString()
toString()
方法用來將數(shù)組進(jìn)行字符串格式的輸出([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 String,看這篇就夠了
下一篇:Java 集合類入門篇
微信搜索「*沉默王×××免費(fèi)視頻**」獲取 500G 高質(zhì)量教學(xué)視頻(已分門別類)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。