zoukankan      html  css  js  c++  java
  • 如何理解Comparator接口中的升降序?

    import java.util.*;
    
    
    class DescType implements Comparator
    {
        public int compare(Object o1, Object o2) 
        {
            Integer i = (Integer)o1;
            Integer j = (Integer)o2;
            
            return (i<j?1:(i==j?0:-1));
        }
    }
    
    public class Hello
    {
    	public static void main(String[] args)
    	{
    		Integer a[] = {3, 1, 2};
    		Arrays.sort(a, new DescType());
    		
    		for(int i:a)
    			System.out.println(i);
    	}
    }
    

      

    Q:由上代码: x<y为1即为真。。。也就是第一个参数比第二个参数小为真。。应该是升序排列,这里却是降序排列的,怎么理解??

    A:compare函数的机制是自定义下若o1>o2则返回1,而上面的代码中若1<2会返回1,即在上面的自定义下,其实1是大于2的(即compare(1,2)=1),同理,2也会大于3.那么Array.sort()从小到大排序时其实3是最小的,故输出321,表面上是逆序了,实际是符合上面compare函数中的定义的,还是从小到大输出,只不过上面自定义下3是比1小的。

    另外,Collections.sort(),Arrays.sort() 默认就是升序排列的(如API所说:

    Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface)。

    其实,明白了Comparator比较器的原理,就可以实现自定义排序了。 

    用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。

  • 相关阅读:
    [记录]Eclipse版本选择和安装
    Nexus+Maven安装配置手册
    Eclipse编写Java程序
    Tomcat下载和配置
    SQL Server如何清除连接过的服务器名称历史?
    为文本添加全选Ctrl + A 功能
    配置Eclipse使用TFS源码管理
    [jQuery] jSrcollable
    [ios] cocos2d/cocos2dx 演示
    [c++] 实现类似printf这样的函数
  • 原文地址:https://www.cnblogs.com/uu5666/p/6636444.html
Copyright © 2011-2022 走看看