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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sin曲線とcos曲線を描くプログ...
-
共有メモリについて
-
「配列定数は、イニシャライザ...
-
Javaで簡単なアニメーションを...
-
メインが含まれていません
-
【C#】フォームをなめらかに移動
-
JUnit4のアノテーションについて
-
Javaで画素
-
C++からC#のdllを参照する際、...
-
6桁の数字を重複なしでランダム...
-
java初心者ですが・・・
-
javaのRandomで『a~z』までの...
-
JAVAでCの関数ポインタのような...
-
Javaで電卓を作りたい
-
c# デリゲート関連の命名について
-
行の途中から読み込む方法
-
JavaScriptからJavaアプレット...
-
randomメゾットについて
-
androidアプリが強制終了してし...
-
System.err. printlnとSystem.o...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
JAVA エラー 式の開始が不正で...
-
式の型は配列型で int に解決済...
-
メインが含まれていません
-
javaでcsvファイル読込時の改行...
-
DataSet(DataTable)の使い方
-
java spring でエラーが出て困...
-
C++からC#のdllを参照する際、...
-
c# デリゲート関連の命名について
-
JUnit4のアノテーションについて
-
SwingでJtableのヘッダ行が表示...
-
Java エラーについて
-
6桁の数字を重複なしでランダム...
-
C#で実行時にメソッドの返り値...
-
JAVAでCの関数ポインタのような...
-
IN演算子の中身を動的に生成
-
行の途中から読み込む方法
-
javaでカレンダー作成
-
ビープ音をなめらかに鳴らしたい
-
初心者ですが、今javaで簡単な...
おすすめ情報