[解決済み] 2つのキー(キーペア、値)を持つHashMapを作成する方法とは?
質問
整数の2次元配列を持っています。私はそれらをHashMapに入れたいと思います。しかし、私はArray Indexに基づいてHashMapから要素にアクセスしたい。みたいな感じ。
A[2][5]について。
map.get(2,5)
となり、そのキーに関連する値が返されます。しかし、キーのペアを持つhashMapを作成するにはどうしたらよいでしょうか。あるいは一般に、複数のキーを持つ
Map<((key1, key2,..,keyN), Value)
というように、get(key1,key2,...keyN)を使って要素にアクセスすることができます。
EDIT : 質問を投稿してから3年、もう少し追加したいと思います。
の別の方法に出会いました。
NxN matrix
.
配列のインデックスです。
i
と
j
は、1つの
key
として表現することができます.
int key = i * N + j;
//map.put(key, a[i][j]); // queue.add(key);
また、インデックスは
key
をこのように表現します。
int i = key / N;
int j = key % N;
どのように解決するのですか?
いくつかの方法があります。
2次元
マップのマップ
Map<Integer, Map<Integer, V>> map = //...
//...
map.get(2).get(5);
ラッパーキーオブジェクト
public class Key {
private final int x;
private final int y;
public Key(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Key)) return false;
Key key = (Key) o;
return x == key.x && y == key.y;
}
@Override
public int hashCode() {
int result = x;
result = 31 * result + y;
return result;
}
}
実装する
equals()
と
hashCode()
はここでは重要です。そして、単純に使用します。
Map<Key, V> map = //...
とする。
map.get(new Key(2, 5));
Table
グアバより
Table<Integer, Integer, V> table = HashBasedTable.create();
//...
table.get(2, 5);
Table
用途
地図の地図
の下にあります。
N次元
注目すべきは、特別な
Key
クラスは n 次元にスケールする唯一のアプローチであることに注意してください。また、検討してもよいでしょう。
Map<List<Integer>, V> map = //...
というような書き方をしますが、これはパフォーマンスの観点からも、可読性や正確性の観点からも、ひどいものです(リストサイズを強制する簡単な方法がない)。
Scalaを見てみると、タプルと
case
クラスがあります (全体の
Key
クラスをワンライナーで置き換えます)。
関連
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] HashMapを直接(リテラルに)初期化する方法は?
-
[解決済み] ハッシュマップのキーを指定して、値を更新するには?
-
[解決済み] Java Hashmap。値からキーを取得する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
javaで非静的な解を静的な参照にすることができない
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
自動配線された依存性のインジェクションに失敗しました。
-
java 例外。Javaツールの初期化
-
[解決済み] JavaでequalsとhashCodeをオーバーライドする際に考慮すべき事項は?
-
[解決済み】同じキーで複数の値を持つHashMap
-
[解決済み] なぜhashCodeに素数を使うのですか?