首先我们需要明白什么是通用容器.通用容器是包含和组织对象集合的数据结构,可以存储任何数据类型的数据,并且这些容器在不同的应用程序中都是可以重用的.如数组、表、堆栈、集合、树和哈稀表等。容器有很多用处,在java.util.Collections类中,它提供了许多处理容器问题的方法,其中最为常用的是其排序sort()方法和用于检索的折半查找法binarySearch(),还有一些其他的方法。其中只有Max()和Min()方法是所有的容器都能使用的方法,除了这两个之外的方法,都只能用列表处理。
下面的一个小程序实现了对数组的升序排序和降序排序功能。事先给定一个int型数组,并对其赋值,要求将其元素按升序和降序输出。由于容器的sort()方法只能处理列表对象,所以需要事先将其转换为列表。这期间需要用到Interger类,因为它可以实现int型数据象Integer数据的转换,否则会报错ava.lang.ClassCastException:。
代码如下:
import java.util.*;
public class SortTest {
public static void main(String[] args){
int[] a={1,2,-5,6,-88,45,6845,0,685};
int len=a.length;
Integer[] ab=new Integer[len];//Integer类封装了int型字段.其对象可以实现int和string的相互转化,以利于将数组转化为列表的操作
for(int i=0;i<len;i++)
{
ab[i]=a[i]; //将原始数组值赋给新数组.
}
List abList=Arrays.asList(ab);//将数组转化为列表
/**Arrays类包含了各种处理数组的方法,如排序和查找,也包含了将数组转化为列表的功能(lists),如Arrays.asList(ab);
* 之所以需要将其转化为列表,是Collections容器只能对列表对象进行排序.
* */
//sort as ascend
Collections.sort(abList);//根据元素的自然顺序 对指定列表按升序进行排序
System.out.println("Ascend Order is:");
for(int i=0;i<len;i++){
System.out.println(ab[i]);//打印升序后的列表
}
//sort as descend
Comparator c=new ReverseCompare();//创建比较器对象
Collections.sort(abList,c);//根据指定比较器产生的顺序对指定列表进行排序。
System.out.println("Descend Order is:");
for(int i=0;i<len;i++){
System.out.println(ab[i]);//打印经降序后的列表
}
}
//构建比较器类
static class ReverseCompare implements Comparator{
public int compare(Object i,Object j)
{
Integer bj=(Integer)j;Integer ai=(Integer)i;//强制类型转换
return bj.compareTo(ai);
}
}
}