黑马程序员技术交流社区

标题: 关于比较器的问题 [打印本页]

作者: 欧德林    时间: 2012-4-16 11:23
标题: 关于比较器的问题
是不是 Collection集合下面的List ,Set,Map方法都可以用 Comparator接口和CompareTo方法去实现比较?
实现方式就是通过下面这样的代码吗?
下面一段代码 定义了一个比较器 ,返回值-1,1 是不是只要是负数或者正数就可以了? 如果相等呢?
class StrComparator implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
                int num =s1.compareTo(s2);
                if(num>0)
                        return -1;
                if(num<0)
                        return 1;
                return num;
        }
}
作者: liuyang    时间: 2012-4-16 11:52
compareTo这个方法 返回值 是int的 不是boolean的  如果返回值是0就表示 相等
如果是不完全包含 返回值是负数  完全包含 返回值是正整数
class StrComparator implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
                int num =s1.compareTo(s2);
                return num;
        }
}

上面那样就行,然后根据返回值是正负或者是0判断
作者: 王永旺    时间: 2012-4-16 12:02
这段代码在num==0时,不执行if操作。直接执行下面语句 return num;也就是返回0(因为此时num就是0)。
作者: 秦超    时间: 2012-4-16 12:32
比较器只适用于二叉树数据结构的集合类型,例如TreeSet和TreeMap,所以比较器并不是适用于所有集合的
如果要比较的两个数相等,比较器会返回0
作者: 秦超    时间: 2012-4-16 12:32
比较器只适用于二叉树数据结构的集合类型,例如TreeSet和TreeMap,所以比较器并不是适用于所有集合的
如果要比较的两个数相等,比较器会返回0
作者: 欧阳才志    时间: 2012-4-16 13:11
class StrComparator implements Comparator<String>
{
        public int compare(String s1,String s2)
        {
                int num =s1.compareTo(s2);
                if(num>0)
                        return -1;
                if(num<0)
                        return 1;
                return num;
        }
}

如果是相等的返回0,因为初始化是0啊。int在没有给值的情况下,系统会自动赋值0

作者: 陈超    时间: 2012-4-16 16:11
本帖最后由 陈超 于 2012-4-16 16:12 编辑

Collection集合下面的List 、Set接口,Map接口都可以用 Comparator接口和CompareTo方法去实现比较
Set接口和Map接口不用说了。
List接口本身并不具备比较性,我们可以直接实现Comparable接口,然后通过Collections集合工具类对集合进行排序。
                           同样可以定义一个类(比较器)实现Comparator接口,然后通过Collections对集合进行排序
通常当比较相等时,我们就比较次要条件





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2