問題タブ [treeset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2038 参照

java - Java で整数を使用して TreeSet contains() を使用する

contains() メソッドが期待どおりに機能しません。つまり、整数の比較です。出力は 15 です。これは、 if(processed.contains(h1)==false) 正常に動作する場合は 9 であり、要素が既に存在する場合は true を返します!

コードのどこが間違っている可能性がありますか?

0 投票する
3 に答える
1958 参照

java - TreeSet 内の要素のランクを見つける方法

ツリーセットの最初と最後の要素を見つけることができることは知っています。反復せずに 2 番目または 3 番目の要素が何であるかを知りたい場合はどうすればよいでしょうか? または、より望ましいのは、要素を指定して、ツリーセット内のランクを把握することです。

ありがとう

編集:テールセットを使用してそれを行うことができると思います。元のセットのサイズとテールセットのサイズを比較します。テールセットはどれくらい効率的ですか?

0 投票する
2 に答える
1125 参照

java - TreeSetのランキング要素

Javaツリーセットが同一の要素を持つことはできないことを知っているので、同じ「値」を持っていても、何らかの方法で要素を別の要素と区別する必要があります。要素をランク付けできるようにしたいのですが、興味深い動作に気づいています。

そしてこれは出力です:

これは、ヘッドセットが行うことになっていることです。

私は降順でソートしているので、逆のことをするべきだと思います。最初の要素はそれよりも大きいものがないため、0を返し、次に1を追加してランクを取得します。2番目の要素はそれよりも1つ大きいので、1を返す必要があると思います。1を追加すると2になります。これはちょっと奇妙です。私は単純な間違いを犯していると思います。また、2つの20に対処する方法を理解する必要があります。私はそれらのランクを両方とも3にしたいのですが、ツリーセットはそれらが異なる数であると考えています。TreeMultiSetまたは他のサードパーティライブラリを使用できると思います。

0 投票する
5 に答える
3176 参照

java - ソート済みセットのトリミング

アップデートを含むSortedSet(具体的にはTreeSet) があります。更新とは、SVN コミット、Facebook ウォール投稿、新しい Trac チケットなどのようなものです。これらを次のSortedSet理由で保存しています。

  • 並べ替え: 更新は、日付の降順で並べ替える必要があります。
  • セット: 更新元から最新の更新を取得するとき、通常、既にセットに含まれている更新を受け取ります。

さて、しばらくするとセットが非常に大きくなるので、セットから最初の X アイテム以外はすべて削除したいと思います (他のアイテムはとにかく表示されないため)。ではないので、どうすればこれを行うことができListますか?

0 投票する
3 に答える
4166 参照

java - Java TreeSet contains()は誤った結果を出します

私はJavaで少し数学をコーディングしようとしています。私がやろうとしているのは、円分コセットをTreeSetに配置することです。剰余類には、インデックスと整数のセットがあります。セットに同じ要素がある場合、剰余類は他の剰余類と同じです。セットが異なる場合、剰余類はそのインデックス順に並べられます。

例えば:

十分な数学。重複する要素は必要なく、インデックスで並べ替える必要があるため、剰余類をTreeSetに配置することにしました。

問題は、TreeSet.contains()がfalseを返す場合でも、compareTo()メソッドとequals()メソッドを使用したときに等しい1つの要素をTreeSetで見つけることができます。

これは、プログラムの実際のプリントアウトです。

以下のコードを添付します。コードが魔法のように機能することがわかったので、コードを単純化したくありませんでした。コードでMAGIC_INDEXの値を7以下に変更すると、動作を開始します。私にはJVMのバグのようです。

http://2m.lt/files/Main.java

http://2m.lt/files/Coset.java

助言がありますか?

0 投票する
11 に答える
24011 参照

java - コンパレータとequals()

TreeSetドメインロジックでソートされた要素が必要だとします。このロジックでは、等しくない要素の順序は関係ないため、compareメソッドは0を返すことができますが、この場合、それらをに入れることはできませんでしたTreeSet

だから、質問:私がこのようなコードからどのような不利な点があるか:

更新

Ok。@SPFloyd-seanizerや他の人が言ったように、それが常にメソッドとの間の一貫性である必要がある場合equals()。インターフェイスを削除してこのロジックを移動すると、より良い、またはさらに良いと思いますか(カプセル化を壊さずに実行できます)?したがって、次のようになります。hashcode()compareTo()ComparableComparator

アップデート2

安定ソートが必要ない場合System.identityHashCode(x)よりも良いでしょうか?hashCode()

0 投票する
5 に答える
663 参照

java - TreeSetにコンパレータを提供できるのに、HashSetにHasherのようなものを提供できないのはなぜですか?

Java 6では、ツリーセットを作成するときにコンパレータを指定して、セット内のオブジェクトの「自然な順序」をオーバーライドできると理解しています。

Javaがセット内のオブジェクトの「自然なハッシュ」をオーバーライドする「ハッシュ」の提供もサポートしていない理由について何か考えがありますか?

編集:あなたからのインプットを得ることは、将来APIを設計するときに私を助けるかもしれません。

ありがとう。

0 投票する
4 に答える
48177 参照

java - TreeSet では、さまざまなプロパティに基づくカスタム オブジェクトの並べ替えと一意性

以下は私の学生クラスです

最新の変更: それでも正しい結果が得られない

TreeSet<Student> のオブジェクトを作成すると、一意の名前に基づいて並べ替えられた Student オブジェクトのリストが取得され、名前順に並べ替えられます。

しかし、私の TreeSet<Student> には、student-rollNo 順で一意の学生名が必要です。

コンパレータで可能ですか?誰でも私を助けることができます, すべての提案は大歓迎です. ありがとう。

更新: 完全なプログラムは次のとおりです。

更新:2: ご提案いただきありがとうございます。まだいくつか必要です:)

出力:

友人、2 つのコンパレーターを使用して得たものは何でも、オブジェクトを追加しながら同じことを達成することは可能ですか?? 最初に要素を追加してから、新しいコンパレータを使用して目的の順序を達成することはできません。
私は何千もの値を操作しているので、パフォーマンスも考慮する必要があります。

0 投票する
2 に答える
849 参照

java - ソート済みセットとコンパレーター

私はTreeSet、A* アルゴリズムの実行中に使用されるパス検索の場所を格納するための を使用しています。

基本的に、「開いている」要素が存在するまで (まだ徹底的に調査する必要があります)、すべての開いている要素の隣接要素が考慮さSortedSetれ、コストとヒューリスティック コストによって並べ替えられた に追加されます。これは、次のようなクラスがあることを意味します。

この方法では、最初に総コストが考慮され、次に総順序付けが必要なため (equals との整合性)、x、y 座標による順序付けが考慮されます。

これは機能するはずですが、次のようにアルゴリズムの実行中に TreeSet を反復処理すると機能しません。

正しい順序が保持されていない結果が得られます。たとえば、次のようになります。

(7,7,6) (7,6,7) (6,8,6) (6,6,7) (5,8,7) (5,7,7) (6,7,6) ( 6,6,7) (6,5,7) (5,7,7) (5,5,8) (4,7,7) (4,6,8) (4,5,8)

私が見逃している微妙なものはありますか?ありがとう!

0 投票する
4 に答える
263 参照

java - ジェネリックスとTreeSets

Genericsでの作業は間違いなく私の弱点であり、これについてはいくつかの助けを借りることができます。

このプロジェクトは、注文を出し、アイテムと在庫を追跡し、プログラムの開始以降のすべての在庫と顧客の追加/削除を記録する簡単な注文/在庫システムを開発することです。これにはファイルの読み取りと書き込みが必要であり、解析するCSV形式を選択しました。解析するファイルは2つあり、1つは用Customers、もう1つは用Itemsです。

TreeSetを使用して追加/検索ログNを作成したいのですが、ファイルの解析に問題があります。オブジェクトタイプに対して重複コードが機能する2つのクラスを用意するのではなく、実行時にセットとファイルパスを取得し、ファイルをオブジェクトの完全なセットに処理する単一の解析クラスが必要です。どちらも異なります。フィールドとメソッド。

私が思いついた唯一の解決策はですがTreeSet<? extends Object>、それは、構造内でアクセスされた各オブジェクトをボックス化してから、ボックス化解除する必要があることを意味します。

もっと簡単な方法はありますか?