2013-07-25 101 views
0

我收到错误的异常在线程“主要” java.lang.ClassCastException :com.genous.Employee不能转换为java.lang.Comparable的我想根据名字来缩短员工,但我得到这个错误?

在java.util.Arrays.mergeSort(Arrays.java :1157)

在java.util.Arrays.sort(Arrays.java:1092)

在java.util.Collections.sort(Collections.java:134)

在com.genious。 Employee.main(Employee.java:54)//

public class Employee implements Comparator 
{ 
String firstname; 
String lastname; 
int mobileno; 
public Employee(String firstname,String lastname,int mobileno) 
{ 
this.firstname=firstname; 
this.lastname=lastname; 
this.mobileno=mobileno; 
} 

@Override 
public String toString() { 
     return firstname; 
} 


@Override 
public int compare(Object o1, Object o2) { 
Employee e2=(Employee)o1; 
Employee e3=(Employee)o2; 
int i=e2.firstname.compareTo(e3.firstname); 
if(i!=0) 
    return i; 

return i; 
} 


/** 
* @param args 
*/ 
public static void main(String[] args) { 
ArrayList list=new ArrayList(); 
    Employee e=new Employee("anand","pandey",93456666); 
    Employee e1=new Employee("sheel","nidhi",678956344); 
    Employee e5=new Employee("shumit", "Kumar", 97390267); 
    Employee e6=new Employee("Kamal", "Kumar", 97390267); 
    list.add(e); 
    list.add(e1); 
    list.add(e5); 
    list.add(e6); 
    System.out.println(list); 
Collections.sort(list); 
    System.out.println(list); 
} 



} 
+0

你打算如何确定一名员工是否与另一名员工相同?如果你只想要独特的elemetns被存放,使用集合。如果允许重复员工,请使用列表 –

+5

为什么地球上会有ArrayList中的数百万条记录的数据库,而不是您知道的关系数据库。不仅对RDBMS目录执行查询要容易得多,而且对系统资源更友好且更强大。看起来你正在使用错误的工具来解决那些非常普遍的问题。 – scottb

+2

如果是面试问题,你应该写一下。那么社会就会明白,问题不在于如何做到这一点。问题是如何使用ArrayList作为数据结构。这是关于算法的更多信息 – hatesms

回答

4

您可以在您的员工类中覆盖equals()方法,并将所有员工对象添加到集合而不是列表中,您将获得唯一员工对象的列表。并且如果您希望重复条目的计数可以减去集合大小()从列表大小()

  //Provided you have overriden the equals() method 
      List<Employee> employeeList = new ArrayList<Employee>(); 
      Set<Employee> employeeSet = new HashSet<Employee>(employeeList); 

      int dupEntries = employeeList.size() - employeeSet.size(); 
      System.out.println("Dup Entries : "+dupEntries); 
+0

是设置有这个属性,但我已经告诉在ArrayList中这样做,所以h我们将在ArrayList中做什么?但正如我所知,set不允许重复,但有三个字段firstname,lastname,如上所示,如果你有正确的答案,那么它会很好的代码? – Sheel

+1

为什么你想使用列表?当该集合提供该功能时,虽然正如我所提到的,您应该根据需要重写equals方法(),但您希望如何检查这个Euality。如果TreeSet能够根据等号和散列码 – Siva

3

实现Comparable接口

public class Empl implemnents Comparable{ 
    public int compareTo(Empl o){ 
    if(.... your check if duplicate ....) 
     return 0; 
    return -1; 
    }; 
} 

,并尝试这个

ArrayList<Empl> yourlist = ...; 
TreeSet ts = new TreeSet(); 
ts.addAll(yourlist); 
yourlist.removeAll(ts); 

现在您的清单中有所有重复项。 要覆盖equals()对我自己而言太低级别和冒犯性。

+0

比较对象那么短内部哪个基础会短,因为员工应该是唯一的,不同的员工可能有相同的名字? – Sheel

+0

(更新的答案)你喜欢什么,写入条款。 –

+0

嘿彼得读者请看我给了一些代码。为什么它给错误。o/p应该在短的答案来,我想你会喜欢看一看。 – Sheel

相关问题