6

値がまだそこに格納されていない限り、追加したいarrayListがあります。たとえば、私の配列が次のような場合:

H
LK
KL
LS

そして、私は値 LS を持っています。それは追加されません。しかし、値が A の場合は、A になります。順番や並べ替えは気にしません。情報がそこにあるかどうかだけです。

コードは次のようにする必要があると考えていました。

value = A;
no = 0; 
for (int o; arraylist.length; o++)
   if (arraylist.get(o).equals(value)){
     continue;
   }else{ 
      no++;
   }
}
if (arraylist.length = no){
    arraylist.add(value);
}

しかし、それを行うためのより簡単な方法が必要です。これを行うためのより簡潔な方法を知っている人はいますか?

4

5 に答える 5

1

セマンティクスが必要な場合List(つまり、要素が順序付けられている場合)、サブクラス化ArrayListUniqueArrayListまたは何かを呼び出す)し、そのaddメソッドをオーバーライドしcontainsて、要素が存在しない場合にのみ呼び出して追加できます。

public class UniqueArrayList<E> extends ArrayList<E> {

    @Override
    public boolean add(E e) {
        if (!contains(e)) {
            return super.add(e);
        } else {
            return false;
        }
    }

    // TODO: override addAll etc.
}

if(!list.contains(...これは、必要なすべての場所でチェック (またはループ)を行うことに比べて、最もオブジェクト指向の方法です。

また、これが必要な場合に備えて、オブジェクトの既存の機能を維持することもできます。Listたとえば、 を介してインデックスで要素にアクセスすることgetができます。

順序の概念が重要でない場合は、Set. セットは、定義と実装の両方で、一意の要素のみを含みます。

于 2013-09-10T19:55:58.770 に答える
0

おそらくデータ構造が間違っています。この場合はセットの方が良いでしょう。

于 2013-09-10T20:01:35.143 に答える