zoukankan      html  css  js  c++  java
  • Java开发笔记(七十一)容器工具Collections

    清单作为一组数据的有序队列,它在组织形式上与数组有着某些异曲同工之处,数组有专门的数组工具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实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/pinlantu/p/10527025.html
Copyright © 2011-2022 走看看