HashMap[] seminar_list;
seminar_list = dbControl.get_SEMINAR_LIST();
という形で以下のような表形式のデータをseminar_listにセットしました。
------------------
IDCATEGORY
001aaa
002bbb
003bbb
------------------
1次元の配列であれば、配列の位置を検索できることを確認できましたが、2次元の場合はどのように検索を行えばよいのでしょうか?
行いたいことは、ID:001のCATEGORYの値 を取得するようなプログラムを作成したいと思っています。
以下のようなプログラムを作成しましたが、(1)のところでエラー
(java.lang.ClassCastException)となってしまいました。
===========================================================================
Arrays.sort(seminar_list); (1)
int seminar001_index = Arrays.binarySearch(seminar_list, "001"); (2)
String cate001 = (String)seminar_list2[cate001_index].get("CATEGORY"); (3)
===========================================================================
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
2次元配列というのは
int[][] num = new int[3][4];
こういう風に配列の中に配列があるものです。
それは置いといて。
IDとCategoryがHashMap[]にどういう風に入ってるか気になりますね
seminar_list[0].put("001","aaa");
seminar_list[1].put("002","aaa");
もしかしてこんな感じですか?
これなら配列にする必要はないですね。
seminar_list.put("001","aaa");
seminar_list.put("002","bbb");
でOK
他の質問でもありましたが、なぜHashMapを配列に・・・。
あと、蛇足ですが
public IDComparator implements Comparator{
public int compareTo(HashMap map1,HashMap map2){
String str1 = null;
String str2 = null;
for(int i=0;i<3;i++){
String id = "00" + (i+1);
str1 = map1.get(id);
if(str1 != null) break;
}
//上記と同じことをmap2でも実行
int num1,num2;
if(str1.equals("aaa")) num1 = 1;
//上記と同様に"bbb"のときnum1 = 2;のようにし、
//num2でも繰り返す。
return num1 - num2;
}
}
というクラスを作って
質問の(1)の上の行に
Comarator c = new IDComparator();
ほいで(1)を
Arrays.sort(seminar_list,c);
とすると "sortは" うまくいきます。が、残念ながら次の行で死にます
hiroaki213さんが指摘されたようにすると次の行もうまくいきます。
何でうまくいかないのかわからないなら、今はほっとくというのも手です。僕は実際Comparatorを使うまではさっぱりわかりませんでした。
ここら辺の面倒臭さがJavaのとっつきにくい理由なんですよね。
経験の浅い人でもキッチリしたプログラムを作れるという利点でもあるのですが。
No.3
- 回答日時:
よく読んでなかった!
(2)と(3)に書いてあるやんorz
この場合はArrayListを使うといいですよ。
ArrayList idList = //IDの値を入れる
ArrayList categoryList = //Categoryの値を入れる
HashMap map = new HashMap();
map.put("IDList",idList);
map.put("CategoryList",categoryList);
という感じで。
ArrayListは入れた順番を記憶してくれるので配列のように位置を指定できます。
ArrayListやHashMapの使い分けができると、プログラムの幅がぐっと広がりますよ。
No.1
- 回答日時:
例外java.lang.ClassCastExceptionは
配列に相互に比較可能でない要素が混ざっているときに
投げられる例外だそうです。
例えば
seminar_list[0]とseminar_list[1]はどのように比較すると思いますか?
参照型の配列をArrays.sort()メソッドの引数として渡す場合は
きちんと比較方法を定義しなければなりません。
APIによると、配列の要素は全てComparableインタフェースを実装しており
また、配列のすべての要素は、「相互に比較可能」でなければないそうです。
つまり、配列の要素が e1 および e2 の場合に、e1.compareTo(e2) で ClassCastException を投げないようにしなければなりません。
具体的な方法としましては
HashMapクラスを継承し、Comparableインタフェースを実装した
新たなクラスを定義し、比較方法(CompareTo()メソッド)を
定義してあげてはいかがでしょうか?
あとこれは余談ですが
本当に配列を用いなければなりませんか?
読みやすいプログラムを書くことも大切です。
参考URL:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …[])
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[Ljava.lang.Stringってなんですか
-
配列の中に複数存在する数がい...
-
『args[]』とは?
-
Javaで文字と数字が混ざったも...
-
この警告はどうすれば?
-
Java配列の問題を教えてくださ...
-
ランダムでのboolean値の与え方
-
配列で、値の入っている要素数...
-
javaについて
-
MAPの配列・・・???!!!
-
2次元配列のコピー
-
【C#】ハッシュテーブル(連想...
-
n番目に大きな値を探索する
-
CSVファイルの、列だけ取得したい
-
main(String[] args) の args...
-
java
-
セッションを使ったint型の値の...
-
動的配列確保
-
多次元配列はなぜ必要???
-
String型をbyte型へ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[Ljava.lang.Stringってなんですか
-
この警告はどうすれば?
-
C#で動的配列Listの中身をListB...
-
javaで大容量テキストファイル...
-
C言語でunsigned char配列を連...
-
n番目に大きな値を探索する
-
JavaのBase64デコードで正しく...
-
配列で、値の入っている要素数...
-
Javaで文字を漢字であるか否か...
-
配列の中に複数存在する数がい...
-
データベースから取得したデー...
-
【C#】ハッシュテーブル(連想...
-
Javaで文字と数字が混ざったも...
-
cloneメソッドについて (java)
-
ArrayListからBean配列に値をセ...
-
配列をセッションに割り当てた後で
-
int配列をbyte配列に変換
-
セッションを使ったint型の値の...
-
javamailで複数人にメールを送...
-
【Ajax通信&Java】配列の受け取...
おすすめ情報