2016-02-29 93 views
0

我有下面的代碼,它幫助我從名單上刪除重複的元素:重複對象,Java列表

public static void main(String[] argv) 
{ 

// Créer un objet ArrayList 
List<String> array_L = new ArrayList(); 

// Ajout des éléments avec doublon 
array_L.add("Londre"); 
array_L.add("Paris"); 
array_L.add("New York"); 
array_L.add("Londre"); 
array_L.add("Paris"); 
array_L.add("Londre"); 

System.out.println ("Contenu avec doublon: "+array_L); 

// Créer une liste de contenu unique basée sur les éléments de ArrayList 
Set<String> mySet = new HashSet<String>(array_L); 

// Créer une Nouvelle ArrayList à partir de Set 
List<String> array_L2 = new ArrayList<String>(mySet); 

// Afficher le contenu de ArrayList 
System.out.println("Contenu sans doublon: "+mySet); 
    } 

然後我試着動了一下前進,並創建對象的列表(圖書例如):

public static void main(String[] argv) 
{ 

// Créer un objet ArrayList 
List<Book> array_L = new ArrayList<Book>(); 

// Ajout des éléments avec doublon 
Book b=new Book(); 
b.setName("Londre"); 
b.setSbn(123); 

Book b2=new Book(); 
b2.setName("Paris"); 
b2.setSbn(1); 

Book b3=new Book(); 
b3.setName("Londre"); 
b3.setSbn(123); 
array_L.add(b); 
array_L.add(b2); 
array_L.add(b3); 

System.out.println ("Contenu avec doublon: "+array_L); 

// Créer une liste de contenu unique basée sur les éléments de ArrayList 
Set<Book> mySet = new HashSet<Book>(array_L); 



// Afficher le contenu de ArrayList 
System.out.println("Contenu sans doublon: "+mySet); 
} 

Book對象

public class Book { 
String name; 
int sbn; 

    //getters and setters 
} 

所以在它的結尾保持所有數據,包括重複之一

+3

你需要重寫的hashCode()和equals()方法爲類圖書。使其獨特(減少重複)。 –

+0

http://stackoverflow.com/questions/5396939/hashcode-and-equals-for-hashset –

+0

我認爲你應該重寫equals方法。所以'列表'可以檢測到它是重複的 –

回答

0

您正在使用Set來消除列表中的重複項。到現在爲止還挺好。

問題是HashSet的構造函數無法確定2 Book是否相同。

讓您的IDE在類Book中生成方法equalshashCode以解決此問題。

+0

非常感謝你,它現在在控制之下 –

0

在你的情況,你要添加不同的對象(未設 上,因爲創建一個使用「新」的關鍵字相同的內存位置。)

所以,到目前爲止,它成爲唯一然後對方, 要解決這個問題。

你需要來裝飾你的書類成以下方式,

class Book { 
    private String name; 
    private int sbn; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getSbn() { 
     return sbn; 
    } 

    public void setSbn(int sbn) { 
     this.sbn = sbn; 
    } 

    @Override 
    public int hashCode() { 
     return this.getSbn(); 
    } 

    @Override 
    public boolean equals(Object obj) { 
     Book b1 = (Book) obj; 
     if (b1.getName().equals(this.getName())) { 
      return true; 
     } 
     return false; 
    } 

}