ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのHashmapとStringの文字比較

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初めまして。Javaに関わってまだ間もないので、意味が伝わるか不安ですが、質問させていただきます。
目的:String mojiにある文字列を使用して、HashMapの検索を行いたい。


例えば、
二つのAllayListを用いて、一つのHashmapにそれらを関連付けをしました。
Map.put(aArray、bAllay);//aArrayには文字列"りんご"、bArrayには文字列"5"

String moji="りんご";


HashMapにある、"りんご"と、String mojiにある"りんご"が別のもで、equalseで比較することができないし、map.get("りんご")はできるけど、map.get("moji")はできないことはわかります。

どうすれば、String mojiの、値を使用して、HashMapの中身を取り出すことができるのですか?



伝わりにくい文章ですが、よろしくお願いします。

コメント(4)

HashMap には,「キー」と「値」を一つづづしか追加できません.
なので,aArray を追加してしまうと,aArray の要素である "りんご" が追加されるのではなく, aArray そのものが キーとして追加されてしまいます.

一つ一つキーと値を HashMap に追加するように for 文で回します.

そのプログラム例
----
ArrayList<String> keys = new ArrayList<String>();
keys.add("りんご");
keys.add("みかん");

ArrayList<String> values = new ArrayList<String>();
values.add("5");
values.add("10");

HashMap<String, String> hashmap = new HashMap<String, String>();
for(int i = 0; i < keys.size(); i++) {
 hashmap.put(keys.get(i), values.get(i));
}

String moji = "りんご";
String value = hashmap.get(moji);
----
という感じでどうでしょう?
こんにちは、紅零と申します。

答えを明記しますと、下記のようにすれば質問の答えになります。

----------------------------------------------------------------

1行 : String sKey_01 = "りんご";
2行 : ArrayList<String> alValue_01 = new ArrayList();
3行 : alValue_01.Add("5");
4行 : HashMap<String,ArrayList> hm = new HashMap<String,ArrayList>();
5行 : hm.put( "りんご", alValue_01 );
6行 : ArrayList alGetValue = null;
7行 : alGetValue = hm.get( sKey_01 );

----------------------------------------------------------------

まず、HashMapの使い方を理解しましょう。

4行目のHashMap<String,ArrayList>の意味は
keyのオブジェクトは「String型」で
valueのオブジェクトは「ArrayList型」を使いますよっ
ていう意味になります。

質問でかかれているkeyのオブジェクトは
「ArrayList型」でputされているので、
「String型」のmojiでは取得できないのです。

じゃあ、keyを「りんご」以外でputしたい場合はどうするかと
思われているかと思いますが、下記のようになります。

------------------------------------------------------------
8行 : String sKey_02 = "みかん";
9行 : ArrayList<String> alValue_02 = new ArrayList();
10行 : alValue_02.Add("10");
11行 : hm.put( "みかん", alValue_02 );
12行 : alGetValue = hm.get( sKey_02 );
------------------------------------------------------------

putメソッドとはArraListのAddメソッドと同じような感じで
代入することが可能なのです。
ただし、keyには重複した値を代入できません。

こんな回答でどうでしょうか?


      
そもそもの要件で文字列を利用して検索を行いたい。
とのことですので上のお二人がかかれていることでおのおの回答とは思います。
捕捉をすると

HashMap内には、
品名と価格が格納されていて
品名を指定すると価格が取得できる場合は

String moji = "りんご";

HashMap<String, String> map = new HashMap<String, String>();
map.put("りんご", "100円");
map.put("バナナ", "150円");
 ・
 ・
 ・ (いくつでもputできる。やろうと思ったら100万個でもw)
 ・

String ret = map.get(moji);

でりんごの価格は取得できると思いますが、
Map内にりんごが存在するかわからない。
存在してる場合だけ価格を取得したい。

なんてときはcontainsKeyメソッドを利用します。

if (map.containsKey(moji)) {
String ret = map.get(moji);
}

HashMap<ArrayList, ArrayList> というようにやられていたのは
どのような経緯があってのことなんでしょうか。
皆様、ご回答ありがとうございます。


問題は解消されました。
今回AllayListから、for文で、Stringに変換して、HashMapに格納する手法を選択しました。

皆様、初心者にもわかりやすい説明ありがとうございます。


プログラムを作成した意図の例えとなってしまうのですが、
今回、八百屋のAPIを使用して、"物"と"価格"と物-価格の"ID"をひっぱてきて、
ひっぱてきた"物"は野菜か?果物か?の判定を行うプログラムを作成しました。
野菜か果物の判定は、スピナーを利用しなければならなかったので、
野菜と果物にIDを振り分け、スピナーで選択された物とIDが結びついていれば、
自前で用意したdata-baseのIDを使用して、判定できると考え、
IDと物を関連付けるためにHashMapを利用しました。(意味不明でごめんなさい)


APIと、スピナーを使用しなければならず混乱してしまい、HashMapを使用する手段を選んでしまいました。
もちろん最善ではないとわかっていますが、今回遠回りの手順しか思いつかず、
HashMapの箇所でつまずいてしまっていたところです。
経験を積みよりスマートなプログラムを作成しなければならないですね。

ありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング