異なるイベントが同じタイムスタンプを持つことができます
そして、イベントをタイムスタンプでソートします
後者の要件はやや不明確です。コレクションのイテレータはインスタンスをソート順に返す必要がありますか? poll()
それとも、ループ内の場合、コレクションは以前の内容をソートされた順序で返す必要がありますか?
iterator()
要素を順番に返す
の場合はそうではありませんPriorityQueue
。を使用することもできますがSortedSet
、並べ替え順序が equals と一致している必要があります。正しくお気づきのように、これは達成できません。私の知る限り、Collection
一部の要素が等しいと見なされる並べ替え順序のために、その要素を並べ替えた順序で保持する JDK はありません。ただし、配列またはを使用して、またはをArrayList
使用して変更後に手動で並べ替えることができます。コレクションがめったに変更されない場合、これが私が選択するアプローチです。頻繁に変更される場合は、JDK の先を見るか、データ構造を自分で実装する必要があります。Arrays.sort
Collection.sort
poll()
ソートされた順序で要素を返します
それが優先キューの良いところです。は(または の実装) が equals と一致する必要PriorityQueue
はありません。そのJavaDocは明確に書いています:Comparator
Comparable
このキューの先頭は、指定された順序に関して最小の要素です。複数の要素が最小値で結合されている場合、ヘッドはそれらの要素の 1 つです。結合は任意に解除されます。
さらに、PriorityQueue
JDK 6での の実装は、とequals
を実装するためだけに使用され、どちらもコンパレータをまったく使用しません。したがって、 equals との一貫性が this にとって重要になる方法は実際にはありません。indexOf(E)
contains(Object)
remove(Object)
Collection
比較可能対比較
equals との一貫性に関する限り、 Comparable を実装するか Comparator を実装するかは問題ではないことに注意してください。a の場合、SortedSet
いずれかが equals と一致している必要があります。PriorityQueue
Collection.sort
Arrays.sort
TreeSet
との一貫性equals
コメントから持ち上げた:
TreeSet
SortedSet であり、compareTo/compare のみに依存することを明示的に示しています。「セットの動作は、その順序が equals と矛盾していても、明確に定義されています。単に Set インターフェースの一般的な契約に従わないだけです。」
引用する場合は、関連するすべての部分を引用してください。完全な段落は次のとおりです。
インターフェースを正しく実装するためには、(明示的なコンパレーターが提供されているかどうかに関係なく) セットによって維持される順序付けがequals と一致している必要があることに注意してください。Set
[...] これは、インターフェイスが操作Set
の観点から定義されているためですが、インスタンスはその(または) メソッドを使用してすべての要素の比較を実行するため、このメソッドによって等しいと見なされる 2 つの要素は、セット、等しい。セットの動作は、その順序付けが equals と一致しない場合でも明確に定義されています。インターフェイスの一般的な契約に従わないだけです。equals
TreeSet
compareTo
compare
Set
はい、それは明確に定義されていますが、質問が要求することはしません:セット内の別のタイムスタンプと同じタイムスタンプを持つTreeSet.add
を渡すと、新しいものは重複していると見なされ、追加されません。ありません。質問は、;の並べ替えについて尋ねます。ソートキーの重複を排除するべきではありませんか?Event
Event
Event
Event
equal
Collection
Events