No.4ベストアンサー
- 回答日時:
すでに、いろいろ回答が付いていますが、
http://www.atmarkit.co.jp/fjava/javatips/081java …
ここの解説が役に立ちそうです。
java.util.HashMapを利用して
HashMapのvalueにさらにHashMapを入れる
HashMapのkeyにArrayListを入れる
の2つの方法が紹介されています。
参考URL:http://www.atmarkit.co.jp/fjava/javatips/081java …
No.3
- 回答日時:
補足です。
No.2のプログラムはあまりテストしてないので
バグがあると思います。
また、No.2のプログラムをもし使用して
何か問題が発生しても保障はしかねますので
よろしくお願いいたします。
No.2
- 回答日時:
javaプログラムを書いていて
そういうものを作るときは毎回書いてましたし
あんまり簡単に連想配列とかつくると
プログラムがわかりにくくなるかもしれないなあ
とも思うのですが
まあ、きょうみがあったのでつくってみました。
私もそういうクラスをつくるのが一番いいかと思います。
プログラムがぐちゃぐちゃなので
役に立たないかも・・。
あとタブを全角SPにしてるのでそのままだとコンパイルできません。
package jp;
import java.util.HashMap;
public class PluralDimensionMap {
HashMap map = new HashMap();
int dimensionLength =0;
/**
* コンストラクタ.
*/
public PluralDimensionMap(String[] keyArray, Object value) {
if(keyArray==null || keyArray.length==0) {
return;
}
map = new HashMap();
dimensionLength = keyArray.length;
map.put(keyArray[keyArray.length-1], value);
for (int i=(keyArray.length-2); i>=0; i--) {
map = putMap(keyArray[i], map);
}
}
/**
* 値の取得.
*/
public Object get(String[] keyArray) {
if(keyArray==null || keyArray.length==0) {
return null;
}
HashMap map_=null;
for (int i=0; i<(keyArray.length-1); i++) {
map_ = (HashMap)map.get(keyArray[i]);
}
return map_.get(keyArray[keyArray.length-1]);
}
/**
* 設定.
*/
public void put(String[] keyArray, Object value) {
if(keyArray==null || keyArray.length!=dimensionLength) {
throw new RuntimeException("キー配列の長さは初期時と同じにしてください。");
}
Object[] array= (Object[])getAccessMap(map, keyArray, 0);
HashMap map_= (HashMap)array[0];
int newMapIndex = ((Integer)array[1]).intValue();
if(newMapIndex<keyArray.length-1) {
HashMap newMap = new HashMap();
newMap.put(keyArray[keyArray.length-1], value);
for (int i=(keyArray.length-2-newMapIndex); i>=1; i--) {
newMap = putMap(keyArray[i], map_);
}
map_.put(keyArray[newMapIndex], newMap);
} else {
map_.put(keyArray[keyArray.length-1], value);
}
}
private Object[] getAccessMap(HashMap map_, String[] keyArray, int i) {
if(i==keyArray.length-1) {
return new Object[]{map_, new Integer(i)};
}
HashMap mapRe = (HashMap)map_.get(keyArray[i]);
if(mapRe==null) {
return new Object[]{map_, new Integer(i)};
} else {
return getAccessMap(mapRe, keyArray, i+1);
}
}
private HashMap putMap(String key, HashMap map_) {
HashMap mapRe = new HashMap();
mapRe.put(key, map_);
return mapRe;
}
}
使い方サンプル
---------------------------------------------------------
PluralDimensionMap map = new PluralDimensionMap(new String[]{"111", "222"}, "111222");
map.put(new String[]{"111", "333"}, "111333");
map.put(new String[]{"222", "444"}, "222444");
String value = (String)map.get(new String[]{"111", "222"});
System.out.println(value);
String value2 = (String)map.get(new String[]{"111", "333"});
System.out.println(value2);
String value3 = (String)map.get(new String[]{"222", "444"});
System.out.println(value3);
map.put(new String[]{"111", "333"}, "xxxxxxx");
String value4 = (String)map.get(new String[]{"111", "333"});
System.out.println(value4);
サンプル出力結果
---------------------------------------------------------
111222
111333
222444
xxxxxxx
No.1
- 回答日時:
TreeMapかHashMap及びVector クラスを駆使して
そういうクラスを作るしかないのでは?
この場合だと2つのStringを格納するクラスを作り
それをMapに格納して、検索できるようにするといった感じでしょうか。
参考URL:http://msugai.fc2web.com/java/collection/HashMap …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- Java Java、配列の問題を教えて欲しいです。 ・日、月、火、水、木、金、土 ・各曜日の英語 を2次元配列 2 2023/07/10 19:14
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- PHP クラス 1 2022/08/08 15:12
- 物理学 量子力学 生成消滅演算子 2 2022/08/04 23:17
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- JavaScript 二次元配列の全要素の全要素を区切り文字無しで連結する最も単純な書き方を教えてください 3 2023/06/09 12:51
- 工学 コンデンサメインの降圧回路 6 2022/09/02 17:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
式の型は配列型で int に解決済...
-
C++からC#のdllを参照する際、...
-
JAVAでCの関数ポインタのような...
-
共有メモリについて
-
「配列定数は、イニシャライザ...
-
コード中の謎のエラー
-
C#での画像ファイルをドラッグ...
-
javaでカレンダー作成
-
ビープ音をなめらかに鳴らしたい
-
java spring でエラーが出て困...
-
java 長さの異なる配列の代入
-
JAVA EOFの検出 (条件文で「...
-
SwingでJtableのヘッダ行が表示...
-
Java 初心者 int型の取り扱い方
-
後置インクリメントの計算過程...
-
二分探索木で例えば1〜10の値を...
-
sin曲線とcos曲線を描くプログ...
-
byte[2] から int へ。
-
intが負の時に投げる例外はあり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
DataSet(DataTable)の使い方
-
「配列定数は、イニシャライザ...
-
JUnit4のアノテーションについて
-
C#で実行時にメソッドの返り値...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
c# デリゲート関連の命名について
-
java streamでenum配列への変換
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
-
アンマネージDLLで、ダイアログ...
-
【C#】フォームをなめらかに移動
-
(Swing)JTextFieldを半角のみ入...
-
Javaで簡単なアニメーションを...
-
javaのエラーの意味がわかりま...
-
C#で判断文(三択)の省略形は...
-
共有メモリについて
おすすめ情報