Collections工具类,是集合对象的工具类,提供了操作集合的工具方法,例如排序、复制和反转排序等方法。
Arrays工具类,是数组的工具类,提供了对数组的工具方法,例如排序、二分查找等。
- void sort(List list)
根据数据元素的自然顺序对指定集合按升序进行排序。
- void sort(List list, Comparator c)
根据指定比较器产生的顺序对指定集合进行排序。通过自定义Comparator比较器,可以实现按程序员定义的规则进行排序。Collections工具类里很多方法都可以指定比较器进行比较和排序,这里不都列举出来。关于Comparator比较器,将会在下面的课程中介绍。
对指定集合进行随机排序。
- void reverse(List list)
反转指定集合中数据元素的顺序。
- Object max(Collection coll)
根据数据元素的自然顺序,返回给定Collection集合中的最大元素。该方法的输入类型为Collection接口,而非List接口,因为求集合中最大元素不需要集合是有序的。在Collections工具类里静态方法中输入参数的类型,需要大家注意区分。
- Object min(Collection coll)
根据数据元素的自然顺序,返回给定Collection的最小元素。
- int binarySearch(List list,Object o)
使用二分查找法查找指定集合,以获得指定数据元素的索引。如果此集合中不包含该数据元素,则返回-1。在进行此调用之前,必须根据集合数据元素的自然顺序对集合进行升序排序(通过 sort(List list)方法)。如果没有对集合进行排序,则结果是不确定的。如果集合中包含多个元素等于指定的数据元素,则无法保证找到的是哪一个。
- int indexOfSubList(List source,List target)
返回指定源集合中第一次出现指定目标集合的起始位置,如果没有出现这样的集合,则返回-1。
- int lastIndexOfSubList(List source,List target)
返回指定源集合中最后一次出现指定目标集合的起始位置,如果没有出现这样的集合,则返回-1。
将所有数据元素从一个集合复制到另一个集合。
- void fill(List list,Object o)
使用指定数据元素替换指定集合中的所有数据元素。
- boolean replaceAll(List list,Object old,Object new)
- void swap(List list,int i,int j)
在指定集合的指定位置处交换数据元素。
接下来通过一个例子来演示Collections工具类中静态方法的使用。
编译、运行程序,运行结果如图3.8所示。
图3.8 Collections工具类使用
之前我们使用了Comparable接口实现了在TreeSet集合中的自定义排序。这种方法是通过在集合内的元素类中,实现compareTo(Object o)方法进行元素和元素之间的比较、排序的。因为是在类内部实现比较,所以可以将Comparable称为内部比较器。
由实现了Comparable接口的类组成的集合,可使用Collections工具类的sort(List list)方法进行排序,排序规则是由compareTo(Object o)方法确定的。TreeSet集合是一个有序的Set集合,默认即按照Comparable接口的排序规则进行排序。而其他List集合,默认是按照用户添加元素的顺序进行排序的,要想让集合元素按照Comparable接口的排序规则进行排序,需要使用Collections工具类的sort(List list)方法。String、Integer等一些类已经实现了Comparable接口,所以将这些类加入List集合中,就可以直接进行排序了。
接下来通过一个案例来说明Collections工具类的sort(List list)方法对集合内元素实现Comparable接口的依赖,具体代码如下:
编译、运行,程序运行时抛出异常,提示Student类没有实现Comparable接口,无法进行排序。修改上面的Student类,实现Comparable接口的compareTo(Object o)方法,具体代码如下:
再次编译、运行程序,运行结果如图3.9所示。
图3.9 Comparable比较器的使用
既然将Comparable称为内部比较器,那么自然就会想到应该有外部比较器。接下来要隆重推出的就是Comparator外部比较器,也就是在学习Collections工具类的sort(List list, Comparator c)方法时提到的比较器。
接下来,通过在外部定义一个姓名比较器和一个学号比较器,然后在使用Collections工具类的sort(List list,Comparator c)方法时选择使用其中一种外部比较器,对集合里的学生信息按姓名、学号分别排序输出,具体代码如下:
程序运行结果如图3.10所示。
图3.10 Comparator比较器的使用
Arrays类是操作数组的工具类,和Collections工具类相似,它提供的所有方法都是静态的。Arrays类主要有以下功能:
对数组进行排序。
给数组赋值。
比较数组中元素的值是否相当。
接下来通过一段代码,演示Arrays工具类的使用,具体代码如下:
编译、运行程序,其运行结果如图3.11所示。
图3.11 Arrays工具类的使用