Java:順番に一意の要素を含むリスト

このオブジェクトが以前に追加された場合、オブジェクトを昇順で格納し、追加しないjavaのリストタイプがありますか?私はjavaのマップがそれを行うことができますが、私が望むことを行うリストの種類があるのだろうかと思います。それ以外の場合は、contains、equalsToをオーバーライドしてメソッドを追加する必要があります。

19
いいえ使用セット?
追加された 著者 r15habh,
次に、 ArrayList を派生させ、 add メソッドをオーバーライドします。オブジェクトを追加する前に contains 注文とは、リスト(リストのような)によるアクセスを意味しますか?
追加された 著者 Prince John Wesley,
いいえ、containsはコンテンツタイプのequals()に依存するため、containsをオーバーライドしないでください。オーバーライドする必要があるのは、コレクションに格納するタイプのequalsメソッドです。 (ハッシュコレクションを使用する場合はハッシュコード)。とにかく、すでに言及したように、TreeSetが最適です。 (または、LinkedHashSet、自然順序の何らかの種類ではなく、指揮命令を維持する必要がある場合)
追加された 著者 zeller,
@Prince John Wesley:ArrayListをオーバーライドすることは、リストが意味的に一意ではないため、良い考えではありません。それを除けば、車輪を再発明するよりも優れた解決策があります。
追加された 著者 zeller,
あなたは挿入や自然順序によってどんな順序を意味しますか?
追加された 著者 denis.solonenko,
私は注文についてもっと話すのを忘れてしまって申し訳ありません。私はオブジェクトを昇順で保存したい。あなたの応答のための方法でありがとう。
追加された 著者 meandbobbymcgee,

8 答え

ユニークな要素だけを含むリストが必要ですか? 2つのオプション:

  • java.util.LinkedHashSet - preserves the order of insertion, has the set semantics
  • from commons-collections SetUniquieList - allows list operations like get(..) and set(..)
  • from commons-collections ListOrderedSet
37
追加された
ええ、彼の要件は LinkedHashSet の "順序を保持する"ことでした。ランダムアクセスが必要な場合は、他のオプションの1つを使用できます
追加された 著者 Bozho,
+1質問者の要求を完全に無視して、彼に(任意の)セットが必要だと言っています。
追加された 著者 G_H,

どのような順序であるかによって異なります。

14
追加された

TreeSetはそのトリックを行います。例:

SortedSet myOrderedUniqueList = new TreeSet()

4
追加された

私はあなたがSortedSetの後にいると思います(これはSetを拡張するインターフェースです)。 SetはListと似ていますが、各値の1つのみを含みます。

TreeSetは、一般的に使用されるSortedSetの実装です

http://download.oracle.com/javase/6 /docs/api/java/util/TreeSet.html

4
追加された

TreeSet might be exactly what you need.

要素をソートされたツリーに格納します。だからソートされた順序でそれらを反復することができます。 それはリストではありませんが、addとcontainsに関してはより良い結果を出します。

1
追加された

It is not a list, but you can look at implementations of Set http://download.oracle.com/javase/6/docs/api/java/util/Set.html

0
追加された

SortedSetはSetのサブインタフェースであり、セット内の要素がソートされていることを保証します。

SortedSet orderedSet = new TreeSet();

非重複要素を要素値の昇順に格納する必要がある場合に使用します

0
追加された

一意のプロパティを使用して、オーバーライドされたhashCode()およびequals(Object obj)を使用してjava.util.LinkedHashSetを使用します。

0
追加された