Java核心技術讀書筆記5-3 泛型陣列列表ArrayList類與列舉類
阿新 • • 發佈:2021-11-09
3.泛型陣列列表
Java陣列可以不像C++那樣必須在編譯時確定長度,但Java陣列仍然是定義長度後就不可更改了。這個問題可以由ArrayList類實現動態陣列來解決。
ArrayList維護一個內部陣列,若新增元素時陣列已滿,則會常見一個更大的陣列,並把原值複製過來。
new ArrayList<>(n);代表初始容量而不是最終固定容量,若陣列確認不會變化的時候可以呼叫trinToSize()方法回收無用空間。
3.1 方法:add為插入元素,set為替換元素(若被替換位置沒有元素則會報錯),remove為移除元素。
4.物件包裝器與自動拆裝箱
包裝器的值是不可變的。對基本資料型別的包裝器進行運算實際上都是經過自動拆箱->運算->裝箱的。這些過程是編譯器負責的,實際上生成位元組碼時,編譯器會自動的插入必要方法呼叫。這些操作與虛擬機器無關,虛擬機器只負責處理生成好的程式碼。
5.引數數量可變的方法
可變參的序列必須放置在引數列表的最後部分,形式如下:
public void aMethod(int a, SomeType... args){
...
}
可變參的引數型別必須一致,可以是基本資料型別也可以是引用資料型別。
對於方法的呼叫者,對可變參可以傳入多個變數,也可以傳入一個數組。對於方法體內的接受者,args的形式是一個數組。
6.列舉類
列舉類相當於剛好有n個例項的類,在比較兩個列舉類值的時候直接使用"=="而不要使用equals()
public enum EnumTest { SMALL, //呼叫無參構造器,構造一個型別為EnumTest的列舉常量EnumTest.SMALL, 其name屬性為SMALL。 MEDIUM("M"), //同樣構造列舉常量,但使用了有參構造器,為域abbreviation賦值為“M” LARGE, EXTRA_LARGE; //上述列舉常量,構造時用","隔開,最後一個常量後加分號; private String abbreviation; private EnumTest() { } private EnumTest(String abbreviation){ this.abbreviation = abbreviation; } public String getAbbreviation() { return abbreviation; } } /** * 下面為測試程式碼 **/ EnumTest e = EnumTest.MEDIUM; System.out.println(e.name()); //返回MEDIUM System.out.println(e.toString()); //返回MEDIUM System.out.println(e.getAbbreviation()); //返回域的值"M" EnumTest medium = Enum.valueOf(EnumTest.class, "MEDIUM"); //使用name屬性和列舉類物件構造一個列舉類物件 System.out.println(e == medium); //true for (EnumTest curE : EnumTest.values()) { //返回列舉類的所有列舉常量構成的陣列 System.out.print(curE.ordinal()+" "); //0 1 2 3 列舉常量在列舉類中定義的下標 System.out.print(curE+" "); //SMALL MEDIUM LARGE EXTRA_LARGE }