java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum
一、泛型數(shù)組列表ArrayList
1.在Java中,ArrayList類可以解決運行時動態(tài)更改數(shù)組的問題。ArrayList使用起來有點像數(shù)組,但是在添加或刪除元素時,具有自動調(diào)節(jié)數(shù)組容量的功能,而不需要為此編寫任何代碼。
對數(shù)組列表實施插入和刪除操作效率比較低,對于小型數(shù)組來說可以接受。但是如果數(shù)組存儲的元素數(shù)比較多,又經(jīng)常需要在中間位置插入、刪除元素,就應該考慮使用鏈表。
ArrayList是一個采用類型參數(shù)(type parameter)的泛型類(generic class)。為了指定數(shù)組列表保存的元素對象類型,需要用一對尖括號將類名括起來加在后面。
例如:構(gòu)造和保存一個Employee對象的數(shù)組列表
ArrayList staff = new ArrayList<>();
2.ArrayList類的一些方法
(1)使用add方法可以將元素添加到數(shù)組列表中中
staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));
數(shù)組列表管理著對象引用的一個內(nèi)部數(shù)組。最終,數(shù)組的全部空間有可能被用盡。這就顯示出數(shù)組列表的優(yōu)點:如果調(diào)用add方法且內(nèi)部數(shù)組已經(jīng)滿了,數(shù)組列表就將自動地創(chuàng)建一個更大的數(shù)組,并將所有的對象從較小的數(shù)組中拷貝到較大的數(shù)組中。
如果已經(jīng)明確數(shù)組存儲的元素的數(shù)量,可以在add前調(diào)用ensureCapacity方法:這個方法調(diào)用將分配一個包含100個對象的內(nèi)部數(shù)組。
staff.ensureCapacity(100);
也可以在構(gòu)造數(shù)組列表的時候就指定初始容量:
ArrayList staff = new ArrayList<>(100);
(2)使用size方法將返回數(shù)組列表中包含的實際元素數(shù)目:打印結(jié)果:3
staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));
staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1));
staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15));
System.out.println(staff.size());
(3)使用trimToSize方法將存儲區(qū)域的大小調(diào)整為當前元素數(shù)量所需要的存儲空間數(shù)目,垃圾回收器將回收多余的存儲空間。一旦整理了數(shù)組列表的大小,添加新元素就需要花時間再次移動存儲塊,所以應該在明確不會添加任何元素時,再調(diào)用這個方法。
staff.trimToSize();
(4)使用get和set方法實現(xiàn)訪問或改變數(shù)組列表中元素的操作:數(shù)組列表訪問元素語法較為復雜
staff.set(i, Harry); // 等價于對數(shù)組a的元素賦值:a[i] = Harry;
staff.get(i); // 等價于獲取數(shù)組a下標為i的元素:Employee e = a[i]
(5)使用toArray方法將數(shù)組列表中的元素拷貝到一個數(shù)組中:常用的數(shù)組列表使用方法,既可以靈活地擴展數(shù)組,又可以方便地訪問數(shù)組元素
// 第一步:創(chuàng)建一個數(shù)組列表,并添加所有的數(shù)組元素
ArrayList list = new ArrayList<>();
while(...){
x = ...;
list.add(x);
}
// 第二步:將數(shù)組列表中的元素拷貝到數(shù)組中便于訪問
X[] a = new X[list.size()];
list.toArray(a)
(6)使用帶索引的add方法在數(shù)組列表的中間插入元素:
int n = staff.size()/2;
staff.add(n, e);
(7)使用remove方法移除索引位置的元素并返回:
Employee e = staff.remove(n)
(8)使用for each循環(huán)遍歷數(shù)組列表:
for(Employee e : staff)
e.raiseSalary(5);
3.類型化與原始數(shù)組列表的兼容性
假如有下面這個沒有使用類型參數(shù)的類:可以看到,這里的ArrayList沒有使用泛型,如果和這些代碼交互就會有一些問題。
public classEmplayeeDB{public voidupdate(ArrayList list){..}publicArrayList find(String query){...}
}
可以將一個類型化的數(shù)組列表傳遞給update方法,而不需要進行任何類型轉(zhuǎn)換:即只要是ArrayList類對象,不管是什么具體類型化都可以編譯通過。
ArrayList staff =...;
employeeDB.update(staff);
但是,如果將一個原始的沒有類型化的ArrayList賦值給一個類型化ArrayList就會得到警告:因為得到的可能不是Employee類的類型的數(shù)組列表
ArrayList result = employeeDB.find(....);
這個時候可以使用強制類型轉(zhuǎn)換:這個時候會得到另外一個警告,因為虛擬機中沒有類型參數(shù)
ArrayList result = (ArrayList)employeeDB.find(....);
這個時候,如果確保不會造成嚴重的后果,可以使用@SuppressWarnings("unchecked")來標記這個變量能夠接受類型轉(zhuǎn)換:
@SuppressWarnings("unchecked")
ArrayList result = (ArrayList)employeeDB.find(....);
二、枚舉類Enum
1.沒有構(gòu)造器和方法的枚舉類:在比較兩個枚舉類型的值時,永遠不需要調(diào)用equals,而是直接使用“==”就可以了。
public enum Size (SMALL, MEDIUM, LARGE, EXTRA_LARGE};
2.可以在枚舉類型中添加構(gòu)造器、方法和域,例如:
enumSize
{
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
// 構(gòu)造器private Size(String abbreviation) { this.abbreviation =abbreviation; }
// 返回括號里面的字符(縮寫)public String getAbbreviation() { returnabbreviation; }
// 括號里面的字符(縮寫)privateString abbreviation;
}
3.枚舉類的一些方法:
(1)toString方法能夠?qū)⒚杜e對象轉(zhuǎn)化成字符串并返回枚舉常量名,例如:
System.out.println(Size.SMALL.toString()); // 打印:SMALL
(2)valueOf方法能夠根據(jù)枚舉常量名返回枚舉對象,例如:
Size s = Enum.valueOf(Size.class, "SMALL");
System.out.println(s.getAbbreviation()); // 打印:S
(3)values方法可以返回一個包含全部枚舉值的數(shù)組,例如:
Size[] values =Size.values();for(Size size : values)
System.out.print(size+ " "); // 打印:SMALL MEDIUM LARGE EXTRA_LARGE
(4)ordinal方法返回enum聲明中枚舉常量的位置,例如:
System.out.println(Size.EXTRA_LARGE.ordinal()); // 打印:3
總結(jié)
以上是生活随笔為你收集整理的java arraylist枚举器遍历_Java基础(七)泛型数组列表ArrayList与枚举类Enum的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java数位倒置递归_有人能解释一下这个
- 下一篇: 我的世界java版forge怎么用_我的