數(shù)組為什么特殊
數(shù)組是一種效率最高的存儲和隨機訪問對象引用序列的方式.
因為是一個簡單的線性序列, 所以使得元素訪問非常快.
數(shù)組之所有優(yōu)于泛型之前的容器, 是因為他可以創(chuàng)建一個數(shù)組去持有某種具體類型.
隨著自動包裝機制和泛型的出現(xiàn), 容器已經(jīng)可以與數(shù)組一樣方便的保存基本類型和具體類型的對象了.數(shù)組是第一級對象
無論使用哪種類型的數(shù)組, 數(shù)組標識符其實只是一個引用, 指向在堆中創(chuàng)建的一個真實對象.這個對象用于保存指向其他對象的引用.
對象數(shù)組保存的是引用, 而基本類型數(shù)組保存的是基本類型的值.返回一個數(shù)組
C++不能返回一個數(shù)組, 只能返回一個數(shù)組的指針, 這樣容易造成內(nèi)存泄漏.多維數(shù)組
數(shù)組中構成矩陣的每個向量都可以具有任意的長度.(這被稱為粗糙數(shù)組)數(shù)組與泛型
不能實例化具有參數(shù)化類型的數(shù)組.
我們不能創(chuàng)建實際的持有泛型的數(shù)組對象, 但是我們可以創(chuàng)建非泛型的數(shù)組, 然后將其轉(zhuǎn)型.創(chuàng)建測試數(shù)據(jù)
本節(jié)介紹的工具既可以用數(shù)值或者對象來填充數(shù)組.
6.1
Arrays.fill(數(shù)組, 值)
這個方法是用同一個值填充各個位置, 針對對象而言, 就是復制同一個引用進行填充.
Arrays.fill(數(shù)組,begin,end,值)[begin, end]
6.2 數(shù)據(jù)生成器
如果某個工具使用了generator, 那么你就可以通過選擇Generator的類型來創(chuàng)建任何類型的數(shù)據(jù).
這里有兩個工具類:
1)CountingGenerator: 生成基本類型的數(shù)組, 計數(shù)
2)RandomGenerator: 隨機生成數(shù)來填充數(shù)組
6.3 從Generator中創(chuàng)建數(shù)組
第一個工具: 使用任意的Generator來產(chǎn)生Object子類型的數(shù)組
第二個工具: 接收任意基本類型的包裝器類型數(shù)組, 并產(chǎn)生相應的基本類型數(shù)組
轉(zhuǎn)換器: 接收任意綠的包裝器對象數(shù)組, 并將其轉(zhuǎn)換為相應的基本類型數(shù)組.
- Arrays實用功能
java.utils.Arrays有一套用于數(shù)組的Static實用方法
equals(): 用于比較兩個數(shù)組是否相等
fill(): 填充數(shù)組
sort(): 對數(shù)組排序
binarySearch(): 用于在已經(jīng)排序的數(shù)組中查找元素
toString(): 產(chǎn)生數(shù)組的String表示
hashCode(): 產(chǎn)生數(shù)組的散列碼
Arrays.asList(): 接受任意的序列或數(shù)組作為參數(shù)
7.1 復制數(shù)組
System.arraycopy(a, b, c, d) 不會執(zhí)行自動包裝和拆包
a-源數(shù)組
b-復制a的b下標的元素
c-復制到的目標數(shù)組
d-復制的元素個數(shù)
這是在復制對象的引用, 被稱為淺復制
7.2 數(shù)組的比較
數(shù)組相等的條件是元素個數(shù)必須相等, 并且對應位置的元素也相等.
Arrays提供了重載后額equals()方法, 用來比較整個數(shù)組
7.3 數(shù)組元素的比較
這里使用策略設計模式
變化的是各種對象相互比較的方式
不變的是通用的排序算法
策略將變化的代碼封裝到單獨的類中(策略對象),然后將變化的策略對象傳給相同的排序算法
Java有兩種方式來提供比較功能.
第一種是實現(xiàn)java.lang.Comparable接口, 使自己的類具有比較的能力.
只有compareTo()一個方法, 接受一個Object對象作為參數(shù), 如果當前對象小于參數(shù)則返回負值, 如果相等則返回0, 如果當前對象大于參數(shù)則返回正值.
實現(xiàn)Comparable接口之后 用Arrays.sort()進行排序
第二種是創(chuàng)建一個實現(xiàn)Comparator接口的單獨的類.這個類有equal()和compare()方法.
7.4 數(shù)組排序
使用內(nèi)置的排序方法, 就可以對任意的基本類型數(shù)組排序, 也可以對任意的對象數(shù)組進行排序, 只要該對象實現(xiàn)了Comparable接口或者具有相關聯(lián)的Comparator.
7.5 在已排序的數(shù)組中查找
如果數(shù)組已經(jīng)排好序了, 就可以使用Arrays.binarySearch()執(zhí)行快速查找.
int location = Arrays.binarySearch(a,r)
a是數(shù)組 ,r是要查找的元素