对象数组 排序

对象数组 排序
1、假设定义了一个对象TypeName,TypeName[] t=new TypeName[30],这条语句只是申请了30个指向TypeName类型的引用,并没有申请30个TypeName类型的对象。如果要使用,必须依次重新申请
for(int i=0;i<30;i++)
  t[i]=new TypeName();
2、对对象数组进行排序等操作,需要在该对象上实现comparable接口。然后直接调用Arrays.sort(对象数组名)。如果要指定排序区间,可以Arrays.sort(对象数组名,i,j).这表示从该数组的下标为i处开始到下标为j-1处排序。
3、 Comparable   &   Comparator   都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法   或   在集合内实现Comparable接口的方法。 
  具体请看   <Thinking   in   java>

Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String   Integer自己就可以完成比较大小操作)  
   
  而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。       
    
  可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。

用Comparator是策略模式(strategy   design   pattern),就是不改变对象自身,而用一个策略对象(strategy   object)来改变它的行为。  
   
  比如:你想对整数采用绝对值大小来排序,Integer是不符合要求的,你不需要去修改Integer类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了Comparator接口的对象来实现控制它的排序就行了。  

    1 .   // AbsComparator.java      
    2 .    import    java.util. * ;      
   
3 .    public     class    AbsComparator    implements    Comparator   {      
   
4 .        public     int    compare(Object   o1,   Object   o2)   {      
   
5 .            int    v1    =    Math.abs(((Integer)o1).intValue());      
   
6 .            int    v2    =    Math.abs(((Integer)o2).intValue());      
   
7 .            return    v1    >    v2    ?     1    :   (v1    ==    v2    ?     0    :    - 1 );      
   
8 .       }      
   
9 .   }      
  
10 .        
  
11 .   可以用下面这个类测试AbsComparator:      
  
12 .        
  
13 .    // Test.java      
   14 .    import    java.util. * ;      
  
15 .        
  
16 .    public     class    Test   {      
  
17 .        public     static     void    main(String[]   args)   {      
  
18 .        
  
19 .            // 产生一个20个随机整数的数组(有正有负)      
   20 .           Random   rnd    =     new    Random();      
  
21 .           Integer[]   integers    =     new    Integer[ 20 ];      
  
22 .            for ( int    i    =     0 ;   i    <    integers.length;   i ++ )      
  
23 .           integers[i]    =     new    Integer(rnd.nextInt( 100 )    *    (rnd.nextBoolean()    ?     1    :    - 1 ));      
  
24 .        
  
25 .           System.out.println( " 用Integer内置方法排序: " );      
  
26 .           Arrays.sort(integers);      
  
27 .           System.out.println(Arrays.asList(integers));      
  
28 .        
  
29 .           System.out.println( " 用AbsComparator排序: " );      
  
30 .           Arrays.sort(integers,    new    AbsComparator());      
  
31 .           System.out.println(Arrays.asList(integers));      
  
32 .       }      
  
33 .   }     



你可能感兴趣的:(对象数组 排序)