【问题标题】:Duplicates Objects, java List重复对象,java列表
【发布时间】:2016-02-29 13:59:53
【问题描述】:

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

 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
}

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

【问题讨论】:

  • 您需要将 hashCode() 和 equals() 方法覆盖到 Book 类中。使其独一无二(减少重复)。
  • 我认为你应该重写equals 方法。所以List 可以检测到它是重复的
  • 非常感谢,现在一切都在掌控之中

标签: java list hashset


【解决方案1】:

您正在使用Set 来消除列表中的重复项。到目前为止,一切顺利。

问题是HashSet的构造函数无法判断2个Books是否相同。

让您的 IDE 在 Book 类中生成方法 equalshashCode 以修复此行为。

【讨论】:

    【解决方案2】:

    在您的情况下,您正在添加不同的对象(不在 由于使用 'new' 关键字创建,因此位于相同的内存位置。)

    所以,到目前为止,它变得独一无二,然后彼此修复。

    您需要将您的 Book Class 装饰成以下方式,

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

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      相关资源
      最近更新 更多