0

JAVA:まず、私の質問をご覧いただきありがとうございます。あなたの助けは非常にありがたいです!

したがって、問題は、Javaにオブジェクトのベクトルがあり、各オブジェクトにname(String)があることです。しかし、私には繰り返されるオブジェクトがたくさんあり、繰り返されるオブジェクトは常に、繰り返されるオブジェクトの直後にあります。また、繰り返しの数は1〜10(とてもイライラする)の範囲で、完全にランダムです。

リピートを削除するにはどうすればよいですか。各オブジェクトの名前をベクター内の次のオブジェクトの名前と比較し、一致するすべてのオブジェクトを削除することを考えましたが、多くの問題が発生しました。よろしくお願いします!

-ディラン

編集:あなたが私が話している繰り返しの種類を理解することを確認するために、これを追加しました。

  • ベクター
  • ---Object1(String name = "hi")->これを削除します。
  • ---Object2(String name = "hi")
  • ---Object3(string name = "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;
         }
    
    
    
    }
    
    4

    3 に答える 3

    1

    別のデータ構造を使用する必要があるようです。

    ベクターの代わりにセットを使用することをお勧めします。セットに重複する要素は含まれていません。メソッドをオーバーライドする必要があります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キーワードの詳細は次のとおりです。

    2番目の問題は次のとおりです。正確には、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 に答える