1. 程式人生 > >Java開發筆記(七十一)容器工具Collections

Java開發筆記(七十一)容器工具Collections

collect ava 支持 能夠 泛型接口 代碼例子 lam private 使用

清單作為一組數據的有序隊列,它在組織形式上與數組有著某些異曲同工之處,數組有專門的數組工具Arrays來進行加工操作,照理清單也應該配備對應的清單工具。當然容器這個大家族確實擁有自己的容器工具Collections,不過數組工具Arrays也隱藏著一個清單方法,它便是asList,該方法類似數組的初始賦值,同樣支持把括號內部的一系列數據直接轉為清單對象。前面介紹泛型類和泛型接口的時候,就利用Arrays.asList給某個清單實例進行了初始化賦值,不過調用asList得到的數組大小是固定的,無法進行add、remove等增刪操作。
除了Arrays工具的asList方法,其余的清單加工方法全歸Collections了。首先值得一提的依然是最常用的sort排序方法,Collections的soort方法與Arrays的同名方法一樣,都采用比較器Comparator對指定數組或清單完成排序操作,並且它倆的代碼用法極其相似。比如下面便是采取匿名內部類方式對某清單做排序的代碼例子:

	// 演示如何給清單排序
	private static void testSort() {
		List<Apple> appleList = getAppleList();
		// 匿名內部類方式給清單排序。按照蘋果的重量升序排列
		Collections.sort(appleList, new Comparator<Apple>() {
			@Override
			public int compare(Apple o1, Apple o2) {
				return o1.getWeight().compareTo(o2.getWeight());
			}
		});
		System.out.println("排序後的蘋果清單="+appleList.toString());
	}

運行以上的排序代碼,觀察日誌結果可知處理後的清單果然按照蘋果的重量升序排列了。

排序後的蘋果清單=[
(name=紅蘋果,color=green,weight=100.000000,price=10.000000), 
(name=紅蘋果,color=RED,weight=150.000000,price=10.000000), 
(name=大蘋果,color=yellow,weight=200.000000,price=10.000000), 
(name=大蘋果,color=green,weight=250.000000,price=10.000000), 
(name=大蘋果,color=Red,weight=250.000000,price=10.000000), 
(name=紅蘋果,color=red,weight=300.000000,price=10.000000)]

清單的排序代碼也可改寫為Lambda表達式,從而更簡潔更高效,修改後的排序代碼如下所示。

		// Lambda表達式給清單排序
		Collections.sort(appleList, 
				(o1, o2) -> o1.getWeight().compareTo(o2.getWeight()));

其次是求最大值元素的max方法,以及求最小值元素的min方法。雖然排序後的清單很容易獲得最大值和最小值,例如升序情況下最後一個元素就為最大值,且第一個元素就為最小值,但是畢竟得先經過排序的步驟,所謂多一事不如少一事,倘若能夠直接獲取最大元素和最小元素,那有何樂而不為呢?max方法和min方法的使用很簡單,仍舊是指定待取數的清單實例,以及判斷大小的比較器實例即可。通過max和min求某清單最大與最小元素的代碼示例如下:

	// 演示如何獲取最大值和最小值
	private static void testMaxAndMin() {
		List<Apple> appleList = getAppleList();
		// Lambda表達式獲取容器的最大值。求最重的蘋果
		Apple heavestApple = Collections.max(appleList, 
				(o1, o2) -> o1.getWeight().compareTo(o2.getWeight()));
		System.out.println("最重的蘋果="+heavestApple.toString());
		// Lambda表達式獲取容器的最小值。求最輕的蘋果
		Apple lightestApple = Collections.min(appleList, 
				(o1, o2) -> o1.getWeight().compareTo(o2.getWeight()));
		System.out.println("最輕的蘋果="+lightestApple.toString());
	}

運行上述求最大值和最小值的代碼,觀察下列的輸出日誌,可見正確求得了最大和最小元素。

最重的蘋果=
(name=紅蘋果,color=red,weight=300.000000,price=10.000000)
最輕的蘋果=
(name=紅蘋果,color=green,weight=100.000000,price=10.000000)

除了sort、max和min方法,Collections的還提供了fill和swap方法,其中前者用於給指定清單填滿某元素,而後者用於交換清單中兩個元素的位置。



更多Java技術文章參見《Java開發筆記(序)章節目錄》

Java開發筆記(七十一)容器工具Collections