1. 程式人生 > >Java容器深入淺出之陣列

Java容器深入淺出之陣列

寫在前面

關於Java的學習,特別是對於非計算機專業的同學來說,我總是主張從實踐中來,到實踐中去的學習方法。Java本身是一門應用性特別強的高階程式語言,因此如果能在基於實際開發的經驗基礎上,對JavaSE的核心知識做總結和梳理,將非常有利於沉澱自身的技術知識,並且為進一步的深入研究打好基礎。

JavaSE的知識層次,基於我的經驗,可以分為4點:

1. 基礎知識:包括基本資料型別、語法規範、運算子、流程控制和異常。

2. 面向物件:包括封裝、繼承和多型的Java實現及相關語言特性。

3. 基礎進階:包括常用類、容器、JDBC、IO等。

4. 高階深入:包括多執行緒、反射、JMM、JVM及網路程式設計等。

Java企業級開發,包括Web應用、分散式及大資料等高可靠、高併發和高可用的系統均來自於這些基礎的實現。

關於容器

容器在日常開發中的地位不言而喻,小到連結串列的實現,大到訊息佇列的框架,都與容器息息相關。當完成了Java基礎知識和麵向物件知識的學習之後,就可以開始學習容器並深入理解Java基本資料結構的底層實現原理。

Java的容器大致可以分為陣列、字串物件和集合

陣列的基本使用

Java陣列的要點:

1. 陣列完成初始化,在記憶體中的長度固定,不可改變;

2. 陣列可以存放基本資料型別和物件的引用,但只能儲存同一種類型的資料。

陣列的定義:

type[] arrayName;

陣列的初始化:

1. 靜態初始化:顯式指定每個陣列元素的初始值

arrayName = new type[]{element1, element2, element3...};
arrayName = {element1, element2, element3...};

2. 動態初始化:只給定陣列長度,由系統指定元素的預設初始值

arrayName = new type[length];

陣列的使用:

1. 查:通過索引獲取陣列某個元素的值

2. 改:通過索引對陣列某個元素的值更新(典型的如迴圈賦值)

Java8增強的Array類

Array類的若干static方法可以方便對陣列進行操作:

1. 查詢

int binarySearch(type[] a, type key) --- 陣列按升序排列,通過二分法查詢key在a中的索引,沒有則返回負數。

int binarySearch(type[] a, int from, int to, type key) --- 陣列按升序排列,通過二分法查詢key在a的from和to中的索引,沒有則返回負數。

2. 排序

void sort(type[] a) --- 排序

void sort(type[] a, int from, int to) --- from到to之間的元素進行排序

3. 複製

type[] copyOf(type[] original, int length) --- 把original複製成一個新陣列:

3.1 如果length等於original的長度,全部複製;

3.2 如果length小於original的長度,只複製前length位

3.3 如果length大於original的長度,餘下的系統預設初始值賦值

type[] copyOfRange(type[] original, int from, int to) --- 把original的from到to複製成一個新陣列

4. 轉換

void fill(type[] a, type val) --- 將a的所有元素賦值為val

void fill(type[] a, int from, int to, type val) --- 將a的從from到to的元素賦值為val

String toString(type[] a) --- 轉換為一個字串

5. 判斷

boolean equals(type[] a, type[] b) --- 長度和元素均相等的兩個陣列則返回true

Arrays類Demo如下:

 1 package org.leo.demo.arrays;
 2 
 3 import java.util.Arrays;
 4 
 5 public class TestArrays {
 6 
 7     public static void main(String[] args) {
 8         
 9         int[] a = new int[] {3,4,5,6};
10         int[] a2 = {3,4,5,6};
11         
12         System.out.println("a equals a2? " + Arrays.equals(a, a2));
13         
14         int[] b = Arrays.copyOf(a, 6);
15         System.out.println("a equals b? " + Arrays.equals(a, b));
16         System.out.println("b array is: " + Arrays.toString(b));
17         
18         Arrays.fill(b, 2, 4, 1);
19         System.out.println("b array is: " + Arrays.toString(b));
20         
21         Arrays.sort(b);
22         System.out.println("b array is: " + Arrays.toString(b));
23         
24         System.out.println("the index of number 1 in b is:" + Arrays.binarySearch(b, 1));
25 
26     }
27 
28 }