0

JAVA:首先,非常感谢您花时间看我的问题;非常感谢您的帮助!

所以,问题是我在Java中有一个对象向量,每个对象都有一个名称(字符串)。但是,我有大量重复的对象,而重复的对象总是直接在它们重复的对象之后。此外,重复次数范围为 1-10(令人沮丧),完全随机。

我将如何删除重复项,我考虑将每个对象名称与向量中的下一个对象名称进行比较,并删除所有匹配的对象,但这给了我很多问题。非常感谢您提前提供的帮助!

-迪伦

编辑:只是为了确保您了解我所说的重复类型,我添加了这个。

  • 向量
  • ---Object1(String name = "hi") --> 删除这个。
  • ---Object2(字符串名称=“嗨”)
  • ---Object3(字符串名称=“鲍勃”)
  • 结束向量
  • 编辑2:添加代码

    public class Vector
    {
    public static void main(String args[])
    {
      Person person1 = new Person("jane");
      Person person2 = new Person("jane");
      Person person3 = new Person("bob");
      Person person4 = new Person("shelly");
    
      Vector<Person> vectorObject = new Vector<Person>
      vectorObject.add(person1);
      vectorObject.add(person2);
      vectorObject.add(person3);
      vectorObject.add(person4);
    
     }
    }
    class Person
    {
     String name = null;
     String bDay = null;
     String color = null;
     public Person(String name)
     {
          this.name = name;
         }
    
    
    
    }
    
    4

    3 回答 3

    1

    看来您应该使用不同的数据结构。

    您可能想要使用Set而不是 Vector。集合不包含重复元素。你必须覆盖equals(Object)方法。

    或者使用具有 name 属性的Map作为键值并将相应的 Person 对象存储为值。

    在这两种情况下,您都可以防止重复,而不是事后删除它们。

      Person person1 = new Person("jane");
      Person person2 = new Person("jane");
      Person person3 = new Person("bob");
      Person person4 = new Person("shelly");
    
      Map<String, Person> nameToPerson = new HashMap<>();
      nameToPerson.add(person1.name, person1);
      nameToPerson.add(person2.name, person2);
      nameToPerson.add(person3.name, person3);
      nameToPerson.add(person4.name, person4);
    
      Collection<Person> noDuplicatesHere = map.values();
    
    于 2012-08-05T23:38:47.310 回答
    0

    好吧,我不知道你用的是哪种语言,所以我给你一个 JavaScript 的算法:

    var newvector=new Array();
    var lastName;
    for(var i=0;i<vector.length;i++){
       if(!lastName || vector[i].name!=lastName){
          lastName=vector[i].name;
          newvector.push(vector[i]);
       }
    }
    

    问题是这样创建了一个新向量,如果原始向量很大,可能会出现内存问题。

    于 2012-08-05T23:14:23.673 回答
    0

    这是您的第一个问题:

    class Person 
    {
        String name = null;
        String bDay = null;
        String color = null;
        public Person(String name)
        {
            name = this.name;
        }
    }
    

    它应该是:

    class Person 
    {
        String name = null;
        String bDay = null;
        String color = null;
        public Person(String name)
        {
            this.name = name;
        }
    }
    

    以下是有关this关键字的更多信息:

    您的第二个问题是:我猜您正在尝试创建一个 Vector,确切地说是 java.util.Vector。如果您在名为 vector 的类中创建 Vector 的新实例,它将创建自身的新实例,而不是 java.util.Vector 的新实例。您可以重命名课程,也可以这样做:

    java.util.Vector<Person> vector = new java.util.Vector<Person>();
    

    如果要比较 2 个字符串值,请使用:

    String name = "John";
    String name2 = "Joe";
    if(name.equalsIgnoreCase(name2))
        System.out.println("They match!");
    

    如果您想要完全匹配,也可以只使用 equals() 。

    希望这有帮助!

    于 2012-08-05T23:25:04.203 回答