問題タブ [linkedhashset]

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 投票する
4 に答える
15013 参照

java - Hashset、TreesetとLinkedHashset、Hashmapの主な違いは何ですか?Javaでどのように機能しますか?

LinkedHashSet は、挿入時に要素の重複を許可しないことを理解しています。しかし、Hashset が Hava でどのように機能するのかわかりませんか? Hashset で Hashtable が使用されていることを少し知っているので、ハッシュテーブルは要素を格納するために使用され、ここでも要素の重複は許可されません。次に、ツリーセットもハッシュセットに似ており、重複するエントリを許可しないため、一意の要素が表示され、昇順に従います。

HashMap に関してもう 1 つ疑問があります。Hashmap は順序を維持しません。1 つの null キーと複数の null 値を持つ場合があります。私はこれを理解していませんが、実際にはどういう意味ですか? これの実用的な例はありますか?

私は少し知っています、ハッシュマップはこれに基づいて機能していました-バケットに入れるために使用されるキーと値もバケットに一意の番号を持っています。そのため、バケットからキーと値を識別して取得できます。キーと値のペアを、キーのハッシュコードである識別子のバケットに入れると。

例: キーのハッシュ コードは 101 であるため、バケット 101 に格納されます。1 つのバケットには、複数のキーと値のペアを格納できます。Object1 が「A」、object2 が「A」、object3 が「B」の場合、同じハッシュ コードを持っているとします。そのため、同じハッシュコードを同じバケットに共有することで、さまざまなオブジェクトを格納します。私の疑問は、同じハッシュコードを持つオブジェクトは等しくなければならず、異なるオブジェクトは異なるハッシュコードを持つべきですか?

これは HashSet を使用したプログラムです。

出力は、

私の疑問は、なぜ「a」が「B」と「C」の間に挿入されているのかということです。

今、私は LinkedHashSet を使用しているので、

挿入順序に従い、要素の重複を回避することを理解しています。したがって、出力は、

さて、ツリーセットを使用して:

ここで、私は次のことを理解しています - Treeset は昇順に従います。

それから私の疑問は、Hashset が Java でどのように機能するかということです。そして、LinkedHashset が二重にリンクされたリストに従うことを知っています。二重連結リストを使用する場合、要素をどのように格納しますか? 二重にリンクされたリストとはどういう意味で、どのように機能しますか? それでは、これら 3 つの Hashset、Treeset、LinkedHashset はすべて Java で使用され、Java でのパフォーマンスが優れているのはどれでしょうか?

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

java - LinkedHashSet の特定の要素を置き換えるには?

ArrayList を使用すると、次のようなことができます

LinkedHashSet でこれを達成する簡単な方法はありますか?

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

java - jcomboboxでリンクされたハッシュセットを使用しますか?

MVC デザイン パターンを使用してプログラムを作成しようとしています。私のモデルでは、文字列のセットを作成しました。文字列は、約 45 のロケールのセットです。

私の見解では、JComboBox を作成しています。45 の一意のロケールのセットを順番に使用したいので、LinkedHashSet を使用しています。

ロケールを JComboBox に渡そうとするときに問題が発生しました。よくわからないことがいくつかあります。

編集: 私が知りたい主なことは、セットを JComboBox に入れる方法です。以下は、これを書いているときに私が考えたいくつかの他の質問です。必要に応じて、お気軽に回答してください。

  1. セットを使用する必要がありますか?それは正しいコレクションですか?
  2. LinkedHashSet を使用する必要がありますか?それは正しい実装ですか?
  3. コンボボックスを正しく使用していますか?
  4. アドバイスなどはありますか?
  5. 私はデータ構造についてあまり知りません。それのための良いリソースはありますか?

私がすでに使用しているコードは次のとおりです。

意見

モデル

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

java - LinkedHashSet が重複を削除しない

HashSquareSpec というラッパー クラスに座標ペアを格納する検索アルゴリズムを作成しようとしています。重複を避け、挿入順序を維持するために、各 HashSquareSpec を LinkedHashSet に挿入しています。equals() メソッドと hashCode() メソッドをオーバーライドしても、LinkedHashSet は同じ座標ペアを持つ 2 つの HashSquareSpec オブジェクトを受け入れます。

HashSquare クラス

および HashSquareSpec のスーパークラス

多くの異なる hashCode バリエーションと Eclipse equals および hashCode 生成にもかかわらず、firedShots データ構造は重複を受け入れ続けます。コードの何が問題になっていますか?

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

java - LinkedHashSet と HashSet の反復子の動作が異なることは、ソース コードのどこに実装されていますか?

調べLinkedHashSetHashSet コレクションしています。

私は小さなプログラムを書きました:

出力:

この動作を見て、コレクションのソース コードの調査を開始しました。

LinkedHashSet と HashSet の両方が使用されていることに気付きました

共通toString() 認識 - からAbstractCollection

iterator()から一般的なHashSet

LinkedHashSet私のコードの出力とコード内の出力が異なる理由は何HashSetですか?

Ivan Babaninの回答後に更新

さまざまなコンストラクターの場合LinkedHashSetHashSet呼び出し:

のために LinkedHashSet-

のために HashSet-

HashMapと -の両方のイテレータLinkedHasMap(からHashSet)

調査keySet()方法:

HashMap:

LinkedHashMapkeySetメソッドの特別な実現はできず、実現を使用しHashMapます。

map.keySet().iterator() is:

map.keySet()同じ型を返すためHashMap、同じメソッドLinkedHashMapを呼び出します。newEntryIterator()

間違った発言ですか?

EJP更新用

私はに移動しHashSet#iteratorます:

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

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

java - LinkedHashSet .equals() と LinkedList .equals() の要素は同じだが順序が異なる

次の SSCCE を検討してください。

これは以下を出力します:

しかし、次のように変更LinkedHashSetした場合LinkedList:

それは生成します:

私の質問は明確化の 1 つです。誰かがこれを理解するのを助けることができますか? LinkedHashSetaは等しいと見なされるのに、同じとは見なされないのはなぜLinkedListですか? Listand が役割を果たしているという定義を仮定していますがSet、よくわかりません。

基本的にはsを同じと考えればSetsも同じと考えないListのか?逆もまた然り(要素が重複していないと仮定)?

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

java - LinkedHashSet ドキュメンテーションのあいまいさ: 再挿入

LinkedHashSetの Java ドキュメントには、次のように記載されています。

要素がセットに再挿入されても、挿入順序は影響を受けないことに注意してください。(呼び出しの直前に s.contains(e) が true を返すときに s.add(e) が呼び出されると、要素 e はセット s に再挿入されます。)

最近のプロジェクトでは、リスト ビュー ウィジェットでユーザーに表示するために、クライアント サーバー通信で一連のデータ トークンを保持するために 1 つを使用することにしました。更新されたデータで要素を安価に再挿入でき、順序が変わらないため、ユーザーは驚かないという考えです。

この短いテスト プログラムが示すように、明らかにそうではありません。Oracle JRE 1.7.0_55-b13 を使用すると、他のSetと同じように動作します。

出力

したがって、私の質問は、要素bがセットに再挿入されない (つまり、値を更新するために削除してから再度追加する必要がある) ため、Java ドキュメントのコメントの意味は何ですか?

ありがとうございました!