比较和删除向量中的类似字符串

时间:2012-08-05 23:00:51

标签: java string vector

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

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

我如何删除重复项,我考虑将每个对象名称与向量中的下一个对象名称进行比较,并删除所有匹配但又给我带来大量问题的对象名称。非常感谢你的帮助!

-Dylan

编辑:只是为了确保你理解我正在谈论的那种重复我添加了这个。

  • 向量
  • --- Object1(String name =“hi”) - >删除这个。
  • --- Object2(String name =“hi”)
  • --- Object3(字符串名称=“bob”)
  • 结束载体
  • 编辑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;
         }
    
    
    
    }
    

    3 个答案:

    答案 0 :(得分:1)

    您似乎应该使用不同的数据结构。

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

    或者使用名称属性为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();
    

    答案 1 :(得分: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]);
       }
    }
    

    问题在于,这样就会创建一个新的矢量,如果原始矢量很大,可能会出现内存问题。

    答案 2 :(得分: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()。

    希望这有帮助!