| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 738 人关注过本帖
标题:自定义类用比较器(Comparator)出错,怎么回事?
只看楼主 加入收藏
windyfzz
Rank: 2
等 级:禁止访问
帖 子:90
专家分:12
注 册:2010-7-25
结帖率:68%
收藏
 问题点数:0 回复次数:1 
自定义类用比较器(Comparator)出错,怎么回事?
import java.util.*;
class TreeSetTest
{
    public static void main(String[] args)
    {
        //方法1 运用比较器
        TreeSet<Object> ts=new TreeSet<Object>(new Student.StudentComparator());
        
        //方法2 (由于实现了Comparable接口中的compareTo()方法,直接正常定义TreeSet的对象即可)
        //TreeSet<Object> ts=new TreeSet<Object>();
        ts.add(new Student(1,"lisi"));
        ts.add(new Student(2,"wangwu"));
        ts.add(new Student(3,"zhangsan"));
        ts.add(new Student(3,"mybole"));
        
        Iterator it=ts.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        }
        
    }
}

class Student implements Comparable
{
    int num;
    String name;
   
    static class StudentComparator implements Comparator//定义一个内部类实现Comparator接口
    {
        public int compare(Object o1,Object o2)
        {
            Student s1=(Student)o1;
            Student s2=(Student)o2;   
            
            int result=s1.num>s2.num?1:(s1.num==s2.num?0:-1);
            if(result==0)
            {
                result=s1.(s2.name);
            }
            return result;   
        }
    }
    Student(int num,String name)
    {
        this.num=num;
        this.name=name;
    }
   
  public String toString()
    {
        return "num="+num+","+"name="+name;
    }
   
    public int compareTo(Object o)
    {
        Student s=(Student)o;
        
        //return num>s.num?1:(num==s.num?0:-1);
        
        int result=num>s.num?1:(num==s.num?0:-1);
        if (result==0)
        {
            result= (s.name);
        }
        return result;
    }
}

用方法2没问题,程序运行正确。  
但用方法1时,编译的时候出错:使用了未经检查或不安全的操作。
改成了TreeSet<Object> ts=new TreeSet<Object>(new Student.StudentComparator<Object>());时
编译还是出错:Student.StudentComparator不带有参数。

额...头都晕了,我觉得是编译器版本的问题,怎么改才行啊,请大家指点下,谢谢了!!
搜索更多相关主题的帖子: Comparator 比较器 定义 
2010-12-09 23:24
windyfzz
Rank: 2
等 级:禁止访问
帖 子:90
专家分:12
注 册:2010-7-25
收藏
得分:0 
这么多天了,怎么都没人回答啊,着急哦!!
2010-12-11 20:54
快速回复:自定义类用比较器(Comparator)出错,怎么回事?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014647 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved