复制对象,java列表

时间:2016-02-29 13:59:53

标签: java list hashset

我有以下代码,它帮助我从列表中删除重复元素:

 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);
 }

书籍对象

public class Book {
String name;
 int sbn;

  //getters and setters
}

所以最后它会保留所有数据,包括重复数据

2 个答案:

答案 0 :(得分:0)

您正在使用Set来消除列表中的重复项。到目前为止,非常好。

问题是HashSet的构造函数无法确定2 Book是否相同。

让您的IDE在类equals中生成方法hashCodeBook来修复此行为。

答案 1 :(得分:0)

  

在您的情况下,您正在添加不同的对象(未找到它们   在相同的内存位置,因为创建使用&#39; new&#39;关键字)。

所以,它远远地变得彼此独特,以解决它。

您需要按照以下方式装饰您的Book Class,

testmat * vec4(vertex, 0.0, 1.0);