2016-09-25 90 views
0

下面是我的类Emp和Class Mycomparator,它实现了Comparator。 两者都在同一个包中。由于构造函数TreeMap(Mycomparator)未定义,因此出现错误。我是Java新手。请帮忙。在Java中为TreeMap编写自定义排序

public class Emp { 

    String name; 
    int eid; 

    public Emp(String name, int eid){ 
     this.name=name; 
     this.eid = eid; 
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Emp e1 = new Emp("shankar",333); 
     Emp e2 = new Emp("Ronaldo",222); 
     Emp e3 = new Emp("Messi",111); 
     TreeMap<Integer,Emp> e = new TreeMap<Integer,Emp>(new Mycomparator()); 
     e.put(1, e1); 
     e.put(2, e2); 
     e.put(3, e3); 

     Set<Integer> ss = e.keySet(); 
     for(Integer i:ss) { 
      Emp ee = (Emp) e.get(i); 
      System.out.println(i+"--------"+ee.eid+"======="+ee.name); 
     } 
    } 
} 

以下是我的班级名称Mycomparator,它实现了Comparator接口。

public class Mycomparator implements Comparator<Entry<Integer,Emp>> { 

    @Override 
    public int compare(Entry<Integer,Emp> arg0, Entry<Integer,Emp> arg1) { 
     Map.Entry<Integer,Emp> obj1 = arg0; 
     Map.Entry<Integer,Emp> obj2 = arg1; 
     Emp e1 = (Emp) obj1.getValue(); 
     Emp e2 =(Emp) obj2.getValue(); 
     return e1.name.compareTo(e2.name); 
     } 
    } 
} 
+1

'TreeMap'采用'比较器'**而不是'比较器>' - 这是你的错误。 –

回答

3

一个有序Map,不值排序,而唯一可行的选择是关键(Integer),而不是“进入”进行排序。如果你想按值排序,你需要编写你自己的地图。我不知道任何按价值分类的库实现。

+0

您的意思是最后一个词的“价值”吗? – Andreas

+0

@Andreas谢谢! – chrylis

+0

在这个网站上有很多关于按值排序TreeMap的问题 - 例如(https://stackoverflow.com/questions/2864840/treemap-sort-by- value)。可能值得链接一个。 +1这两种方式 –