日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java现有一个泛型类 提供数组排序功能,java编程思想读书笔记 第十六章 数组

發布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java现有一个泛型类 提供数组排序功能,java编程思想读书笔记 第十六章 数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組,你可以創建并組裝它們,通過使用整型索引值訪問它們的元素,并且它們的尺寸不能改變。

1、數組為什么特殊

數組與其他種類的容器之間的區別有三方面:效率、類型和保存基本類型的能力。在Java中數組是一種效率最高的存儲和隨機訪問對象引用序列的方式。數組就是一個簡單的線性序列,這使得元素訪問非常快速。但是為這種速度所付出的代價是數組對象的大小被固定,并且在其生命周期中不可改變。

數組可以持有基本類型,而泛型之前的容器不能,但是由了泛型,容器就可以指定并檢查它們所持有的對象的類型,并且有了自動包裝機制。容器和數字持有對象的方式都是類型檢查型的,并且唯一明顯的差異就是數組使用[]來訪問元素,而LIst使用的是add()和get()這樣的方法。數組和ArrayList之間的相似性是有意義的,這兩者之間的切換時很容易的。

泛型的出現使得容器也具備了類型檢查的能力,而自動裝箱機制使容器可以與數組幾乎一模一樣的用于基本類型,數組的碩果僅存的優點就是效率。

2、數組是第一級對象

無論使用哪種類型的數組,數組標識符其實只是一個引用,指向在堆中創建的一個真實對象,這個對象用以保存指向其他對象的引用。可以作為數組初始化語法的一部分隱式地創建此對象,或者用new表達式顯式地創建。只讀成員length是數組對象的一部分,表示此數組對象可以存儲多少元素。”[]”語法是訪問數組對象的唯一方式。對象數組和基本類型數組在使用上幾乎是相同的,唯一的區別就是對象數組保存的是引用,基本類型數組直接保存基本類型的值。下面總結了初始化數組的各種方式:

在聲明數組時可采用“聚集初始化”方法:

int[] integers = {0, 1, 2, 3, 4};

但是如果不在聲明時初始化則必須采用“動態聚集初始化”方法:

int[] integers;

integers = new int[] {0, 1, 2, 3, 4};

3、多維數組

創建多維數組的方式:

對于基本類型的多維數組,可以通過使用花括號將每個向量分隔來,如二維數組:int a[][] = { { 1, 2, 3 }, { 4, 5, 6 }, };

使用new來分配數組,三維數組:int a[][][] = new int[2][2][4];

基本類型數組的值在不進行顯式地初始化的情況下,會被自動地初始化。對象數組會被初始化為null。

Java 1.5新增的Arrays.deepToString()方法可以將多維數組轉換為可讀的String。數組中構造矩陣的每個向量都可以具有任意的長度,這被稱為粗糙數組。

4、 數組與泛型

通常,數組與泛型不能很好地結合。你不能實例化具有參數化類型的數組,例如

Peel[] peels = new Peel[10]; //不合法

擦除會移除參數類型信息,而數組必須知道它們所持有的確切類型,以強制保證類型安全。但是可以創建非泛型的數組,然后將其轉型為泛型數組,一旦擁有了泛型數組的引用,就會得到編譯器檢查。但是數組是協變的,因此List也是Object[],并且可以利用這一點把ArrayList賦值到數組中而不會有編譯期或運行時錯誤:

List[] ls;

List[] la = new List[20];

ls = (List[])la;

ls[0] = new ArrayList();

//編譯錯誤

//ls[1] = new ArrayList();

Object[] objects = ls;

objects[1] = new ArrayList();

如果確定將來不會向上轉型,并且需求相對簡單,那么可以創建泛型數組,它提供基本的編譯器類型檢查。但是泛型容器總是比泛型數組更好的選擇。

5、創建測試數據

Java標準類庫Arrays有一個作用十分有限的fill()方法,只能用同一個值填充各個位置,針對對象而言,就是復制同一個引用進行填充,還可以只填充數組的某個區域:

Arrays.fill(a9, “Hello”);

Arrays.fill(a9, 3, 5, “World”);

使用Arrays.fill()可以填充整個數組,或者只填充數組的某個區域。但是由于只能用單一的數值來調用Arrays.fill(),因此所產生的結果并非特別有用。

6、Arrays實用功能

在java.util類庫中可以找到Arrays類,它有一套用于數組的static適用方法,其中有六個基本方法:equals()用于比較兩個數組是否相等(deepEquals()用于多維數組);fill()在前面已經說過了;sort()用于對數組排序;binarySearch()用于在已經排序的數組中查找元素;toString()產生數組的String表示,hashCode()產生數組的散列碼。所有這些方法對各種基本類型和Object類而重載過。次哇UArrays.List()接受任意的序列或數組作為其參數,并將其轉變為List容器。

1)復制數組

Java標準類庫提供static方法System.arraycopy(),用它復制數組比用for循環復制快很多。

格式為:System.arraycopy(Object src, int srcPosition, Object dest, int destPosition, int length);

基本類型數組與對象數組都可以復制。如果復制對象數組,只是復制了對象的引用——而不是對象本身的拷貝,這被稱為淺復制。System.arraycopy()不會執行自動包裝盒自動拆包,兩個數組必須具有相同的確切類型。

2)數組的比較

Arrays類提供了靜態equals()方法,用來比較整個數組。數組相等的條件是元素個數必須相等,并且對應位置的元素也相等,通過對每一個元素使用equals()方法來作比較。使用Arrays.deepEquals()可以比較多維數組。使用靜態方法Arrays.sort()用語對數組進行排序。

3)數組元素的比較

Java有兩種方式來提供比較功能:

第一種是實現java.lang.Comparable借口,使類具有天生的比較能力。此接口只有一個compareTo()方法,此方法接收另一個Object為參數,如果當前對象小于參數則返回負值,如果相等則返回零,如果當前對象大于參數則返回正值。如果對沒有實現Comparable接口的類的數組進行排序,會拋出ClassCastException。因為sort()需要把參數的類型轉換為Comparable。

另外一種,假設使用別人定義好的類并沒有實現Comparable接口,或者類實現了Comparable接口但是需要另外一種比較方式。就需要創建一個實現了Comparator接口的單獨的類。這是策略設計模式的一個應用實例。這個類有兩個方法compare()和equals()方法。不一定要實現equals()方法,因為它間接的繼承自Object的equals()方法。

4)數組排序

Collections類包含一個reverseOrder()靜態方法可以產生一個Comparator,它可以翻轉自然的排序順序。

String的排序算法依據詞典編排順序排序,所以大寫字母開頭的詞都放在前面,然后是小寫字母。如果想忽略大小寫可以使用String.CASE_INSENSITIVE_ORDER比較器。

5)在已排序的數組中查找

Java標準類庫的排序算法對各種類型的正排序都進行了優化——針對基本類型設計的快速排序和針對對象設計的穩定歸并排序。所以無需單行排序的性能。如果數組已經排好順序就可以使用Arrays.binarySearch()執行快速查找。如果要對未排序的數組使用binarySearch()將產生不可預料的結果(可能指沒找到元素的返回情況)。如果找到了目標,Arrays.binarySearch()產生的返回值大于或等于0.否則產生負返回值,表示若要保持數組的排序狀態此目標元素應該插入的位置。這個負值的計算方式的:-(插入點)-1。插入點指第一個大于查找對象的元素在數組中的位置,如果數組中所有的元素都小于查找的對象,插入點就等于數組的長度。如果數組包含重復的元素,則無法保證找到的是這些副本中的哪一個。

如果需要對沒有重復元素的數組排序可以使用TreeSet(保持排序順序),或者LinkedHashSet(保持插入順序)。這些類會自動處理所有細節。除非他們成為程序性能的瓶頸,否則不需要自己維護數組。

如果使用Comparator排序了某個對象數組,在使用binarySearch()時必須提供同樣的Comparator。

總結

以上是生活随笔為你收集整理的java现有一个泛型类 提供数组排序功能,java编程思想读书笔记 第十六章 数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。