Array 和 ArrayList 的異同
資料來源: Medium 本文重點了解 Array 和 ArrayList 的概念以及它們之間的差異。Java數組
數組是一種資料結構,可讓您儲存相同類型的值的有序序列。例如,您可以建立字元、數字等的陣列。這適用於所有原始類型,甚至像String這樣的物件。數組一旦創建,我們就無法更改其大小。以下是聲明數組引用變數並分配數組的一般範例:dataType[] arrayName = new dataType[numElements];
如果我們嘗試新增超過陣列大小的內容,我們會得到ArrayIndexOutOfBoundsException。
數組聲明
若要聲明數組,請在資料類型後使用[ ]字元。它們表明該變數是對數組的引用。數組引用變數可以引用各種大小的數組。new關鍵字在記憶體中建立空間來儲存具有指定數量元素的陣列。分配一個數組引用變數來引用這個新分配的數組。以下範例宣告一個陣列引用變數gameScores,分配一個包含四個整數的陣列,並指派gameScores來引用指派的陣列。int[] gameScores = new int[4];
當使用new關鍵字初始化陣列參考時,陣列元素會自動初始化為預設值。整數和浮點資料型態元素的預設值為零,布林元素的預設值為false。您也可以宣告一個數組引用變數而不立即分配該數組,然後用分配的數組分配該變數。
int[] gameScores;
gameScores = new int[4];
使用非預設值初始化數組
您可以透過在用逗號分隔的大括號{}中指定初始值來用非預設值初始化陣列元素。int [] myArray = { 5 , 7 , 11 };
上面的範例建立了一個由三個整數元素組成的數組,其值為 5、7 和 11。此數組初始化不需要使用new 關鍵字,因為數組大小會自動設定為大括號中的元素數量。對於大型數組,可以透過先定義數組,然後使用循環分配數組元素來完成初始化。可以使用從零開始的索引來存取陣列元素。
Int[ ] intArray = new int [ ] {2};
intArray [0] = 1;
intArray [1] = 2;
數組列表
ArrayList是可調整大小的參考類型的元素的有序列表。它也是屬於 Java Collection Framework 的java.util套件中的一個類別。ArrayList為我們提供了動態陣列並自動處理調整它們的大小。當您為 ArrayList 新增元素時,其記憶體大小會自動增加。您可以使用import java.util.ArrayList;來使用ArrayList ;。我們也可以使用以下語句 建立一個ArrayList實例:ArrayList<Type> arrayList = new ArrayList<Type>();
ArrayList 的 大小可以成長以容納它所需的元素。ArrayList不支援原始型別(例如int ),而是支援參考型別(例如Integer )。初學者中的一個常見錯誤是聲明基本類型(例如int )的ArrayList,如ArrayList<int> myVals。這會導致編譯錯誤:「意外類型,找到:int,必需:引用」。範例:讓我們建立一個名為cars的ArrayList對象,它將儲存字串:
import java.util.ArrayList;
ArrayList<String> cars = new ArrayList<String>();
若要將元素新增至ArrayList ,請使用add()方法。要存取ArrayList的元素,請使用get()方法。
cars.add("Tesla");
cars.add("BMW");
cars.add("Kia");
cars.get(0);
Java 中內建陣列和ArrayList之間的差異在於,在第一種情況下,陣列的大小無法變更(如果要新增或從陣列中刪除元素,則需要建立新陣列) )。而在ArrayList中,可以隨時新增和刪除元素。
Array 和 ArrayList 之間的相似之處
- Array和ArrayList用於儲存元素。
- Array和ArrayList可以儲存空值。
- 這兩個過程都在恆定時間內發生。
- 它們可能有重複的值。
- Array和ArrayList不保證有序元素的存在。
Array 和 ArrayList 之間的主要區別
陣列 ( Array ) 和ArrayList之間的主要差異在於陣列的靜態性質和ArrayList 的動態性質。一旦創建,您就無法更改數組的大小,而ArrayList可以根據需要更改其大小。另一個重要的區別是數組是 Java 提供的基本功能。另一方面,ArrayList是Java中集合框架的一部分。我們可以使用方括號存取數組的元素,在方括號中我們可以指定索引。雖然有一組方法可以存取ArrayList 的元素並更改它們。儘管兩者有所不同,但在其他方面仍然具有可比性。Java 中的這兩種資料結構都基於索引並允許您儲存物件。此外,它們允許空值和重複項。如果您事先知道物件的大小,那麼最好使用陣列。但如果你不確定大小,那麼你應該使用ArrayList。如何寫有效的 equals() 方法
來源:Medium 這篇文章將幫助您更能理解使用 Java 程式碼時equals()方法的使用。 如果我們談論預設的equals()方法並且沒有任何實現,那麼它在很多方面類似於==操作。也就是說,該方法比較物件。例如,equals()比較兩個字串,如果字串相等則傳回true,否則傳回false 。請注意,不建議使用==運算子來比較 Java 中的物件。原因是在比較物件時,只有當引用指向同一個物件時,==才會回傳true 。避免問題的最簡單方法是不重寫equals方法,在這種情況下,類別的每個實例僅等於其自身。只有當類別具有與物件的簡單標識不同的邏輯相等概念,且超類別尚未重寫相等性時,才需要重寫equals。因此,使用equals()方法時,需要判斷物件參考在邏輯上是否等價,是否引用同一個物件。equals 方法的屬性
每個equals方法都實現一個等價關係。它具有以下屬性:-
自反:對於任何非空引用值x, x.equals (x)必須傳回true。
-
對稱:對於任何非空參考值x和y,只有當y.equals(x)傳回true時, x.equals(y)才必須傳回true。
-
傳遞性:對於任何非空引用值x、 y、 z,如果x.equals(y)傳回true且y.equals(z)回傳true,則x.equals(z)也必須傳回true。
-
一致:對於任何非空引用值x和y,多次呼叫x.equals(y)必須一致傳回true或一致回傳false。
-
非空:對於任何非空引用值x, x.equals (null)必須傳回false。
自反性:
一個物件必須等於它自己。若要驗證這一點,請將類別的實例新增至集合中。contains方法很可能表示該集合不包含您剛剛新增的實例。對稱:
兩個物件(它們可以來自不同的類別)必須彼此相等。後續:
不要寫依賴不可靠/易失資源的 equals方法。非零:
如果傳遞給equals 的物件為null ,則始終傳回true。我們總結一下:
這是品質等於方法的秘訣:-
使用==運算子來測試參數是否為對此物件的參考。
-
使用instanceof運算子檢查參數的類型是否正確。
-
將參數轉換為正確的類型。
-
對於類別中的每個「重要」字段,檢查該參數字段是否與該物件的相應字段相符:
- 對於原始欄位:其類型不是float或double,請使用==運算子進行比較。
- 對於物件參考欄位:遞歸呼叫equals方法;對於浮點字段,使用靜態方法Float.compare(float, float); 對於雙字段,請使用Double.compare(double, double)。
- 對於陣列欄位:將這些準則套用至每個元素。如果陣列欄位中的每個元素都很重要,請使用Arrays.equals()方法之一。
- 某些物件引用欄位可能包含空值。為了避免拋出NullPointerException,請使用靜態方法Objects.equals(Object, Object)檢查這些欄位是否相等。
-
當你寫完equals方法後,問自己三個問題:它是對稱的嗎?它是傳遞性的嗎?他是否始終如一?
GO TO FULL VERSION