0

これは間違いなく初歩的な質問ですが、Googleやここで良い答えを見つけることができなかったので、質問する必要があります:

値を一度だけ追加したい場合、Javaでどのようなリストを使用すればよいですか?

問題は、私が大学で Web テクノロジー プロジェクト (Web ショップ) を行っており、このクラウドも接続していることです。私のショップで商品を購入した人に顧客IDをリクエストできます. 私がやりたいことは、これらの ID を抽出してリストに追加することです。しかし、それらを抽出すると、購入したすべてのアイテムのIDが返されるので、「この値はすでにこのリストにあります。何もしないでください」または「このIDはリストにありません。追加しましょう」を確認できるリストが必要ですID」

これを行うことができるリスト、または複雑になりすぎずにリストで行う方法はありますか?

4

5 に答える 5

4

あなたが欲しいSet、これは重複を防ぐデータ構造です。これは、次のCollectionように関数を定義できるためです。

public Collection<MyObject> foo()
{
     return new HashSet<MyObject>();
}

後で内部的にこれに戻り値を変更します。

public Collection<MyObject> foo()
{
     return new ArrayList<MyObject>();
}

API が壊れることはありません。

于 2013-03-04T15:28:33.290 に答える
2

Set には、すべての値が一度だけ含まれます。

ただし、 HashSetの問題は、要素が追加された順序が失われることです。したがって、要素の順序を維持したい場合は、LinkedHashSetを使用することをお勧めします。
LinkedHashSet を使用すると、要素を反復処理すると、挿入された順序で要素が返されます。

public static void main(String[] args) {
    Set<String> hashSet = new HashSet<>();
    hashSet.add("first");
    hashSet.add("second");
    hashSet.add("third");
    for (String s : hashSet) {
        System.out.println(s); // no particular order
    }

    Set<String> linkedHashSet = new LinkedHashSet<>();
    linkedHashSet.add("first");
    linkedHashSet.add("second");
    linkedHashSet.add("third");
    for (String s : linkedHashSet) {
        System.out.println(s); // "first", "second", "third"
    }
}
于 2014-12-19T09:14:32.490 に答える
0
public boolean insertRecord(Programmer targetProgrammer, List programmerList) {
boolean flag = false;
 for (Programmer p : programmerList){
   if (targetProgrammer.getId() == p.getId()) {
       return true;
}
}
return flag;
}

// Then when you invoke:

Programmer target = new Programmer(1,"Dev","Java");
if (!insertRecord(target, myList)) {
 myList.add(target);
}
于 2013-03-04T15:32:49.730 に答える
0

は、重複を含まない であるためSet、探しているのはです。SetCollection

ニーズに応じて使用できるいくつかのタイプがあります。

  • ハッシュセット
  • LinkedHashSet
  • CopyOnWriteArraySet
  • EnumSet
  • ツリーセット
  • ConcurrentSkipListSet
于 2013-03-04T15:45:10.857 に答える
-1

一意のIDの問題を暗黙的に処理するため、 HashSetを使用することをお勧めします。さらに良いのは、一意の要素を自動的にソートされた順序で印刷できるSortedSetです。

于 2013-03-04T17:27:48.793 に答える