• ベストアンサー

HashMapに最初からデータをセットする

shige_70の回答

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.3

直列化(Serialize)という手法を使うことで実現できます。 これが可能なクラスはSerializableインタフェースを実装しています。幸い、HashMapクラスはこの条件を満たしています。 まず、作成するアプリケーションとは別に、そのHashMapにデータをつっこんでファイルに書き出すプログラムを書いてください。書き出すには、java.io.ObjectOutputStreamクラスのwriteObject()メソッドを使います。 上記のプログラムを実行し、HashMapのデータファイルを作成します。 作成するアプリケーションでは、java.io.ObjectInputStreamクラスのreadObject()を使ってそのファイルを読み込みます。

betagamma
質問者

お礼

ありがとうございます! >直列化(Serialize)という手法を使うことで実現できます。 こういう機能(変数をファイルに書き出す->後で読み込む)は、Serializeというのですね。Javaのことだから、そのくらいの機能はあるだろう、と予想はしていましたが、具体的な手法や名称は知りませんでした。 staticなbyte型の配列でハッシュデータを用意して、自分でハッシュのプログラムも書かないのといけないのか?とか考えているところでした。この方法でも理論的にはできますが、めんどくさいですし、ローカルなプログラムになってしまうので悩んでいました。ありがとうございました。

関連するQ&A

  • hashMap.getについて

    たびたび、ご質問させて頂きます。 申し訳ありません。 hashMap.getについてなんですが 以下のようにhashMapを設定しました。 --------------------- public class TestMap { /*HashMap生成(クラス変数)*/ class MyData{ public String sDate; public String sName; } ・ ・ ・ Key = oStringTokenizer.nextToken(); oMyData.sDate = oStringTokenizer.nextToken(); oMyData.sName = oStringTokenizer.nextToken(); hashMap.put(Key,oMyData); ----------------- データを取り出したいので、(inputKey)=入力キー --------------- String[] value = (String[]) hashMap.get(inputKey); System.out.println("日付:" + value[1] + " 名前:" + value[2]); --------------- と、したんですが、エラーは出ないもののSystem.out.printlnの箇所でなにも表示されません。 たびたび、ご質問させて頂いて本当に申し訳ありませんが、ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • HashMap.putについて

    ご質問させて頂きます。 hashMap.putの使い方が良く分かりません。 例えば、以下のようなkudamono.csvファイルがあるとします。 ------------------- A,2003/01/01,スイカ B,2003/02/01,バナナ C,2003/03/01,メロン D,2003/04/01,イチゴ ------------------- このデータをhashMap.putでセットしたいので 以下のようなクラスにしたんですが コンパイルエラーが出てしまいます。 ------------------- /*HashMap生成(クラス変数)*/ public static HashMap hashMap = new HashMap(); public static void main(String args[]) throws Exception { FileReader filereader = new FileReader("kudamono.csv"); BufferedReader bufferedreader = new BufferedReader(filereader); String line; int i = 1; int j = 0; while((line = bufferedreader.readLine()) != null) { System.out.println("Start line at " + i); StringTokenizer stringTokenizerTest = new StringTokenizer(line, ","); while(stringTokenizerTest.hasMoreTokens()) { HashMap.put(stringTokenizerTest.nextToken().toString()); j++; } i++; } filereader.close(); } } --------------- たぶんHashMap.putをする前に キーをセットしたり変数を宣言したりすると思うのですが その辺が良く分かりません。 ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • hashCodeの使用について

    いつもお世話になっています。 hashCodeについて聞きたいのですが、 hashCodeは、暗号化にも利用されるらしいのですが、 使用理由がよくわかりません。 その場合、 http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000045.htmlのURLによると、 HashMapクラスはキーからハッシュコードを取得し、ハッシュコードごとにグループ分けして値を格納する。 値を取得する時には、取り出すために渡されたキーからハッシュコードを取得し、そのハッシュコードを元にまず ハッシュコードごとのグループを取得し、 その後グループ内でキーを元に全検索を行う。 この方法によりHashMapクラスは値の検索がArrayListクラスよりも 早い。 また、ハッシュコードから元のデータは復元できないため、暗号化にも 使用される。 、 どういうことなのでしょうか? 上記の文を解釈して、ソースを作成しようとは思ったのですが、 よくわかりません。 作成してみたソースは、 HashMap hashMap = new HashMap(); //ハッシュコードで格納するmapデータ Map map = new HashMap(); map.put(0,"Tell"); map.put(1, "AAA"); map.put(2,"TTT"); //ハッシュコード String keyword = "keyword"; int key = keyword.hashCode(); //ハッシュコードでキーを設定 hashMap.put(key,map); //格納するMap Map maP = new HashMap(); for(int h=0;h<hashMap.size();h++) { //キーワードをハッシュコードに変換 int stK =keyword.hashCode(); //ハッシュコードで格納したMapデータの取り出し maP = (Map) hashMap.get(stK); } //Mapデータ表示 for(int i=0;i<maP.size();i++) { System.out.println(maP.get(i)); } つまり、ハッシュコードは文字が暗号化され、元の文字がわからない = 暗号化されたに等しくなる ということだけは何とかわかるような気はするのですが。。。 聞きたいのは、ハッシュコードをmapキーにした場合、 後でもし取り出したくなったりしたらどうすべきなのでしょうか? たとえば、どういった処理の場合に使用できるのでしょうか? また、hashCode()はしょっちゅう使用すべきではないのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • android CSVファイルのデータを

    初心者ですが宜しくお願いします。 やりたい処理えですが、CSVファイルのデータをHashMapにセットしたいのです。 現在は下記のように直接値をセットしています。 この値をCSVからセットするにはどうすればよいでしょうか? HashMap<String, String> map = new HashMap<String, String>(); // キーと値のペアを格納 map.put( "Key1", "あ1001" ); map.put( "key2", "い1002" ); map.put( "Key3", "う1003" ); map.put( "key4", "え1004" ); map.put( "key5", "err" ); ------------------------------------ value.csv "key2", "い1002" "Key3", "う1003" "key4", "え1004" "key5", "err" ------------------------------------ 上記csvファイルを作り、読み込むところまではわかります。 ヒント、参考サイトや参考書の情報でもかまいません。 どうぞよろしくおねがいいたします。

    • ベストアンサー
    • Java
  • HashMap要素の操作について

    過去質問を検索致しましたが、適当な質問を見つけられなかった為、質問をさせて頂きます。 ●下記コードのうち、AブロックとBブロックとでどのように異なる為、 Aブロックの値操作が、そのままHashMapへ反省されてしまうのかをご教示願えませんでしょうか? コメント"Aブロック"部分でのArrayList型変数へ操作した内容は、そのままHashMap内の当該キー要素に反映されてしまいます。 コメント"Bブロック"で行う、String型への操作は、HashMap内の当該キー要素に反映はされません。 ■実行環境 ・jdk1.3.1_11 ・Windows XP pro SP2 _________________________________________________ HashMap testMap = new HashMap(); // マップへArrayListとStringを追加 testMap.put("KEY_LIST", new ArrayList()); testMap.put("KEY_STRING", "stringVal"); // Aブロック ArrayList testList = (ArrayList) testMap.get("KEY_LIST"); testList.add("one"); testList.add("two"); testList.remove(0); // Bブロック String testString = (String) testMap.get("KEY_STRING"); testString = "one"; testString = ""; _________________________________________________

    • ベストアンサー
    • Java
  • ArrayListからHashMapの変換

    質問1) ArrayListからHashMapの変換(処理要件は満たすが、より良い方法がないか) 質問2) より良い設計はどうするべきか ※ 長文です。すいません。 == 前提条件:  工程) 保守フェーズ  環境) 3階層のWebシステム(クライアント/AP/DB)、AP実行環境はJava(1.4)、DBはOracle(10g) 処理の目的:  DBに存在するレコードの一覧を画面に表示する。  ただし存在しないレコードはnull(空)表示する。 以下テーブルが存在します。 ----------テーブルイメージ---------------- 内部キー(ID)  表示順序   画面表示名 (以降のカラム省略) ---------------------------------------- 1         1        AAAAAA 2         3        CCCCCC 3         5        DDDDDDD ---------------------------------------- 画面表示は以下です。表示枠は5つ。その他の項目も存在する。 ------------画面表示イメージ-------------- 1: AAAAAA 2: (空) 3: CCCCCC 4: (空) 5: DDDDDDD ----------------------------------------- 現状: DB参照は内製のORマッパを使用します。その内のひとつ、メソッドAは 上記テーブルを対象に3つのDTO(Data Transfer Object)を保持したArrayListを返却します。(orderは内部キー) 一方、画面表示ではkey=Valueでの取扱いが有利なため、HashMapで組んでいます。 このため、新たに構築したHashMapにArrayListの内容を順次展開しながら、Mapに 詰めなおすロジックが必要となっています。 (擬似コード)------ List list = ORマッパ.メソッドA(); Map map = new HashMap(); int order = 0; int listIndex = 0; DTO dto = null; for (int i = 0; i < DISPLAY_MAX_COUNT; i++) {   dto = (DTO)list.get(listIndex);   order = dto.get表示順序();   if (i == order) {     map.put((String)i, dto);      listIndex++;    } else {     map.put((String)i, null);   } } (擬似コード)------ 以上を踏まえ、質問いたします。 質問1) ロジックに対するInput/Outputを変更しない前提で、 ArrayListからHashMapの変換でよりよい方法はないか。 質問2) 仮に設計や製造を一からやりなおすことができるとしたら、 より良い設計はどうするべきか。 長文申し訳ないです。最後まで目を通していただきありがとうございます。

  • HashMapのValue値更新管理について

    HashMapを使用し以下の動作を実行したいです。 ■動作 ・HashMapを使用し、KeyとValueを管理(約700件) ・1秒間隔で更新されるこのHashMapを10秒間隔でDBに書き込み  ※HashMap内の更新されたValueのみDBに書き込み ■質問 上記※部分について、HashMap内Valueの更新有無をFlag(boolean)で管理できないか? 何か良い方法はありませんでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • hashMap.getその2

    たびたび、ほんとすいませんが またご質問させて下さい。 先ほど、以下の通り教えて頂きまして 訂正したところエラーは出なくなりました。 MyData myData = (MyData) hashMap.get("A"); System.out.println("日付:" + myData.sDate + " 名前:" + myData.sName); データは以下の通りです。 --------------- A,2003/1/1,スイカ B,2003/2/1,バナナ C,2003/3/1,メロン D,2003/4/1,イチゴ --------------- 正しい表示は、 「日付:2003/1/1 名前:スイカ」 と、表示されなければいけませんが 「日付:2003/4/1 名前:イチゴ」 と、一番最後のレコードが表示されてしまいます。 一行追加しても、やはり一番最後のレコードが表示されてしまいます。 System.out.printlnで確認したところ、hashMapのキーはきちんとセットされているようです。 ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • android HashMapについて助言お願いし

    初心者ですが、どうぞ宜しくお願いします。 下記コードでは、マップに 「 map.put( "Key1", "val1" ); map.put( "key2", "val2" ); 」を追加しているのですが、このデータをキーから取り出しテキストビューに表示しようとしています。 このままではエラーはないのですが、何も表示されない状況です。 初心者の無知な質問となりますが、 テキストビューへの表示方法はどのようにすればよいのでしょうか? 何か別の方法でもよいので、ご教授宜しくお願いいたします。 -------------------------------------------------------------------- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:text="TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv1"></TextView> </LinearLayout> ------------------------------------------------------------ package com.test; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class TestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //1)HashMapからMapのインスタンスを生成 HashMap<String, String> map = new HashMap<String, String>(); // キーと値のペアを格納 map.put( "Key1", "val1" ); map.put( "key2", "val2" ); // 指定したキーに対応する値を取得. String val = (String)map.get( "key1" ); // テキストビュー取得 TextView tv = (TextView)findViewById(R.id.tv1); tv.setText(val); } }

    • ベストアンサー
    • Java
  • android HashMapのValueが取得で

    当サイトでご援助下さった皆様、ありがとうございました。 皆様のおかげで、なんとか下記のようなコードを組むことができました。 処理内容はcsvファイルを読み込み、Tokenizerで分割してArrayListに入れています。そしてListの値をHashMapにputしているのですが、キーを指定してもvalueを取得できません。 テキストビューでvalueを取得しようとしたのですが(//確認 ■■の部分)、値が返ってきてないようです。 HashMapにはちゃんとセットされているとおもうのですが・・・ 下記がコードです。 たびたびの質問で恐縮ですが、皆様のお知恵をお借りできればと思います。 csvファイル ----------------- "kye1 , 良い" "kye2 , 普通" "kye3 , 悪い" ----------------- public class TestCsvActivity extends Activity { String path = "/sdcard/test.csv"; Spinner mSpinner1; TextView mTextView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ハッシュマップ mapSet(); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { //@Override public void onClick(View v) { //Activity終了 finishActivity(); } }); } private void mapSet(){ try { // create reader InputStream input = new FileInputStream(path); InputStreamReader ireader=new InputStreamReader(input, "UTF-8"); CSVReader reader = new CSVReader(ireader,',','"',0); String[] csv; List<String> lists = new ArrayList<String>(); while ((csv = reader.readNext()) != null) { StringTokenizer tok = new StringTokenizer(csv[0], ","); while (tok.hasMoreTokens()) { String s = tok.nextToken(); //アイテムの追加 lists.add(s); } HashMap<String ,String> map = new HashMap<String ,String>(); for(int i = 0; i < lists.size(); i = i + 2){ String key = lists.get(i); String value = lists.get(i+1); map.put(key,value); } // 確認 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ TextView tv = (TextView)findViewById(R.id.textView1); tv.setText( map.get("key1") ); //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ } } catch (FileNotFoundException e) { Log.e("ERROR", e.toString()); } catch (UnsupportedEncodingException e) { Log.e("ERROR", e.toString()); } catch (IOException e) { Log.e("ERROR", e.toString()); } } private void finishActivity(){ //Activity終了 finish(); return; } }