2013-07-25 104 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

相關問題