[解決済み] セットから要素を取得する
2022-03-23 01:34:33
質問
なぜ
Set
は、他の要素と等しい要素を取得するための操作を提供していますか?
Set<Foo> set = ...;
...
Foo foo = new Foo(1, 2, 3);
Foo bar = set.get(foo); // get the Foo element from the Set that equals foo
があるかどうかを問うことができる。
Set
と等しい要素が含まれています。
bar
なぜ、その要素を取得できないのでしょうか?
明確にするために
equals
メソッドはオーバーライドされますが、すべてのフィールドではなく、1つのフィールドのみをチェックします。そのため、2つの
Foo
オブジェクトは同じだと思われていますが、実際には異なる値を持つことがあります。
foo
.
解決方法は?
イコールであれば、要素を取得する意味がない。A
Map
の方がこのユースケースには適しています。
それでもなお、要素を見つけたい場合は、イテレータを使用する以外の選択肢はありません。
public static void main(String[] args) {
Set<Foo> set = new HashSet<Foo>();
set.add(new Foo("Hello"));
for (Iterator<Foo> it = set.iterator(); it.hasNext(); ) {
Foo f = it.next();
if (f.equals(new Foo("Hello")))
System.out.println("foo found");
}
}
static class Foo {
String string;
Foo(String string) {
this.string = string;
}
@Override
public int hashCode() {
return string.hashCode();
}
@Override
public boolean equals(Object obj) {
return string.equals(((Foo) obj).string);
}
}
関連
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] Javaで配列を集合に変換する方法
-
[解決済み] Javaでリストを集合に変換する最も簡単な方法
-
[解決済み] SetをArrayに変換するには?
-
[解決済み] Pythonは順序集合を持つか?
-
[解決済み] 集合から要素を削除せずに取り出すには?
-
[解決済み] C# Setコレクション?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
プロローグでのコンテンツは禁止されています
-
プロジェクトの依存関係を解決できなかった 解決
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
linux run jarfile Invalid or corrupt jarfile error.
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
テストが見つかりませんでした