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

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

	// 演示如何給清單排序
	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());
	}

 

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

排序後的蘋果清單=[
(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求某清單最大與最小元素的代碼示例以下:app

	// 演示如何獲取最大值和最小值
	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());
	}

 

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

最重的蘋果=
(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開發筆記(序)章節目錄日誌

相關文章
相關標籤/搜索