文章目錄
- 1. 陣列為什么特殊
- 2.陣列是第一級物件
- 物件陣列和基本陣列的區別:
- 陣列自動初始化的值:
- 創建陣列的方式:
- 3.回傳一個陣列
- 4.多維陣列
- 5.陣列與泛型
- 6.創建測驗資料
- 7.Arrays實用功能
- Arrays的靜態方法
- 復制陣列(非Arrays的方法)
- 陣列的比較
- 陣列元素的比較
- 陣列排序
- 在已排序的陣列中查找
1. 陣列為什么特殊
- 陣列與其他種類的容器之間的區別有三方面:效率、型別和保存基本型別的能力
- 在Java中,陣列是一種效率最高的存盤和隨機訪問物件參考序列的方式
- 陣列就是一個簡單的線性序列,這使得元素訪問非常快速
- 因為速度所付出的代價是陣列物件的大小被固定,并且在其生命周期中不可改變
2.陣列是第一級物件
-
無論使用哪種型別的陣列,陣列識別符號其實只是一個參考,指向在堆中創建的一個真實物件,這個(陣列)物件用以保存指向其他物件的參考
-
只讀length只表示陣列能夠容納多少元素,而不是實際保存元素個數
-
“[ ]”語法是訪問陣列物件唯一方式
-
物件陣列和基本陣列的區別:
- (1) 物件陣列保存的是 參考
- (2) 基本型別陣列保存的是 基本型別的值
-
陣列自動初始化的值:
- (1) 參考 自動初始化為:null
- (2) 基本型別中是數值型的 自動初始化為:0
- (3) 字符型(char)自動初始化為:(char)O
- (4) boolean 自動初始化為:false
-
創建陣列的方式:
- (1) Integer[] a;
- (2) Integer[] b = new Integer[5];
- (3) a = new Integer[]{1,2,3,4};
- (4) a = {1,2,3,4};
3.回傳一個陣列
- 在Java中,可以直接回傳陣列,且陣列待你使用完,垃圾回收器才會清理它
4.多維陣列
- 對于基本型別的多維陣列,可以通過使用花括號將每個向量分隔開
- Arrays.deepToString()
- (1) 可以將多維陣列轉換成多個String列印
- (2) 這個方法對基本型別陣列和物件都起作用
- 粗糙陣列:陣列中構成矩陣的每個向量都可以具有任意長度
- 自動包裝機制對陣列初始化器也起作用
5.陣列與泛型
- 不能實體化具有泛型的陣列
- 擦除會移除引數型別資訊,而陣列必須知道它們所持有的確切型別,以強制保證型別安全
- 你可以引數化陣列本身的型別
- 使用引數化方法而不使用引數化類的方便之處在于:你不必為需要應用的每種不同的型別都使用一個引數去實體化這個類,并且你可以將其定義為靜態
- 你不能創建實際的持有泛型的陣列物件,但是你可以創建 非泛型的陣列,然后將其轉型
List<String>[] ls;
List[] la = New List[10];
ls = (List<String>[]) la;
ls[0] = new ArrayList<String>();
6.創建測驗資料
- Arrays.fill()
- (1) 只能用同一個值填充各個位置,而針對物件而言,就是復制同一個參考進行填充
- (2) 對某個區域進行填充
- (3)例如:
String[] c = new String[3];
Arrays.fill(c, 'a'); //[a,a,a]
Arrays.fill(c,1,2,'b'); //[a,b,a] 或 Arrays.fill(c,1,3,'b'); //[a,b,b]
7.Arrays實用功能
-
Arrays的靜態方法
- (1) equals():比較兩個陣列是否相等(deepEquals()比較多維陣列)
- (2) fill():見第六節
- (3) sort():對陣列排序
- (4) binarySearch():在已排序的陣列中查找元素
- (5) toString():產生陣列的String表示
- (6) hashCode():產生陣列的散列碼
- (7) asList():接受任何序列或陣列作為其引數
-
復制陣列(非Arrays的方法)
System.arraycopy(Object src, int srcPos, Object dest, int destPos,int length)
- (1) 用它復制陣列比用for回圈要快很多
- (2) 引數
- i.src:要復制的陣列(源陣列)
- ii.srcPos:復制源陣列的起始位置
- iii.dest:目標陣列
- iv.destPos:目標陣列的下標位置
- v.length:要復制的長度
- (3) 淺復制:如果復制物件陣列,只復制物件參考
- (4) 不會執行自動包裝和在自動拆包,兩個陣列必須具有相同的確切型別
-
陣列的比較
- (1) Arrays.equals(a1, a2);
- (2) Arrays類提供了多載后的equals()方法
- (3) 陣列相等的條件是元素個數必須相等,并且對應位置的元素也相等
- (4) 對于基本型別,需要使用基本型別的包裝器類的equals()方法,例如,對于int型別使用Integer.equals()作比較
-
陣列元素的比較
- (1) 排序必須根據物件的實際型別執行比較操作
- (2) Java有兩種方式來提供比較功能
- i.實作java.lang.Comparable介面
- 只有一個compareTo()方法,此方法接受另一個Object為引數
- 當前物件 > 引數,回傳正值
- 當前物件 = 引數,回傳0
- 當前物件 < 引數,回傳負值
- 只有一個compareTo()方法,此方法接受另一個Object為引數
- ii.實作Comparator介面,利用Collections類的reverseOrder()方法
- 該方法可以產生一個Comparator,它可以反轉自然的排序順序
- i.實作java.lang.Comparable介面
- (3) 實作Comparator的public int compare(Pet o1, Pet o2) {}
- (4) 實作Comparable的public int compareTo(Pet o) {}
-
陣列排序
- (1) 使用內置的排序方法,就可以對任意的基本型別陣列排序;也可以對任意的陣列物件進行排序,只要該物件實作了Comparable介面或具有相關聯的Comparator
- (2) 排序三種形式
Arrays.sort(sa); // 字典排序,大寫字母在前,小寫字母在后
Arrays.sort(sa, Collections.reverseOrder()); //反序
Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER); //忽略大小寫的字典排序
- (3) 排序演算法
- i.基本型別:快速排序
- ii.物件型別:歸并排序
-
在已排序的陣列中查找
-
(1) 使用Arrays.binarySearch()前要使用Arrays.sort()排序
-
(2) binarySearch()
- i.回傳大于等于零(元素算在下標)
- ii.回傳負值:“ —(插入點)” 例如:“-1”,表示第一個大于查找物件的元素在陣列中位置
- iii.如果陣列中所有元素都可小于查找的物件,(插入點)就等于a.size()
-
(3) 如果使用Comparator拍虛了某個物件陣列(基本型別陣列無法使用Comparator排序),在使用binarySearch()時必須提供同樣的Comparator(使用binarySearch()多載版本)
Arrays.binarySearch(sa,sa[10],String.CASE_INSEITIVE_ORDER)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/169194.html
標籤:其他
上一篇:Java變數及運算子
下一篇:Excel檔案匯入匯出操作
