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开发笔记(序)章节目录

  • 相关阅读:
    MySQL基础
    DNS域名解析服务
    仿Mars MP3播放器项目5
    仿Mars MP3播放器项目4
    仿Mars MP3播放器项目3
    仿Mars MP3播放器项目2
    仿Mars MP3播放器项目1
    JAVA 随记1
    Redis和Memcache的区别
    php用smtp发送邮件
  • 原文地址:https://www.cnblogs.com/pinlantu/p/10527025.html
Copyright © 2011-2022 走看看