• ベストアンサー

JAVAのハッシュテーブルについて

私は、ハッシュテーブルを使い、商品表を作っているのですが、ハッシュテーブルの中身をint型に変換できません。 どうしたら、int型に変換できるか教えていただけませんか?? 自分ではいろいろな方法を試したつもりなのですが。 お願いします

  • staku
  • お礼率60% (3/5)
  • Java
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

No.2へのお礼をみて。 この書き方だとHashtableにはint型の値ではなく文字列が入っています。 > int i = ((Integer)nedan.get("aa[0]")).intValue(); ここを String s = ((String)nedan.get("aa[0]")); int i = Integer.parseInt(s); という感じに直してください。 あるいは、Hashtableに保存する前にint型変換してからIntegerでラップしてHashtableに保存して下さい。

staku
質問者

お礼

ありがとうございます。 できました。 これからも分からないことがあるかもしれないのでその時はお願いします。

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

No.1に書かれた追加の質問について。 ファイルから読み込むときに何型で読み込んで、それをどのようにHashtableに入れていますか? エラーからキャストに失敗していることは分かりますが、具体的な問題点はコードを見ないと分かりません。

staku
質問者

お礼

String Line; while( ( Line = in.readLine() ) != null ) { String aa = Line.split(","); Hashtable nedan = new Hashtable(); nedan.put(aa[0],aa[1]); int i = ((Integer)nedan.get("aa[0]")).intValue(); i=i+3; System.out.println(i); } こんな感じです。お願いします。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

HashtableにはObjectのサブクラスしか保存できません。 int型の値はそのままでは保存できないのでIntegerでラップします。 int i=1; Hashtable h = new Hashtable(); h.set("one", new Integer(i)); i = ((Integer)h.get("one")).intValue(); こんな感じになります。

staku
質問者

お礼

ありがとうございます。 もうひとつ質問なのですが、ファイルから読み込んでハッシュテーブルに入れて、intに変換するにはどうしたらよいでしょうか? ファイルの中身は数値です。 ハッシュテーブルに入れることはできたのですが、その後intに変換しようとするとエラーが出てしまいます。 エラーは Exception in thread "main" java.lang.ClassCastException at Main.main(Main.java:22) です。

関連するQ&A

  • ハッシュテーブルを使って効率の良い文字の置換がしたい場合

    はじめまして。 実はいまハッシュテーブルを利用して複数の外字をそれぞれ対応する文字に変換するJavaのプログラムを考えています。 ただ、その方針までは決まったのですが、実装方法で躓いています。 今のところ、文字列をIndexOfで探して、ある外字がでてきたらハッシュテーブルを見にいってその外字に対応する文字に変換し、また続けてその文字を探していくという方式しか考え付いてないのですが、この方法だと外字一種類ごとに文字列を検索することになってしまい、不幸率のような気がしてきました。なにか他にもっといい方法はあるでしょうか?

    • ベストアンサー
    • Java
  • スレッドとは、ハッシュテーブルとは

    ・スレッドの意味が良く分かりません。  何を指すものなのでしょうか? ・ハッシュテーブルはどういう時に私用するものなのでしょうか? 余り理解もせずに使用している感があり、この先自分自身不安になると思い質問をさせて頂きました。 情けながら、ご教授願います。

  • ハッシュテーブルの問題(java)

    ハッシュテーブルの問題(java) <問題> Improve the hash table implementation of program 5.2 プログラム5.2のハッシュテーブルの実装を改善しなさい。 Allow for more than one table to be in use by making the table a parameter to "insert" and "lookup". 1個以上のテーブルがテーブルを"insert"と"lookup"へのパラメータにすることによって使用中であることを許容してください。 <以下 Program5.2> Class Bucket {String key; Object binding; Bucket next;     Bucket(String k, Object b, Bucket n) { key=k; binding=b; next=n;} } Class HashT {   final int SIZE = 256;   Bucket table[] = new Bucket[SIZE];   int hash(String s) {    int h=0;    for (int i=0; i>s.length(); i++)     h=h*65599+s.charAt(i);    return h;   }   void insert(String s, Binding b) {    int index=hash(s) % SIZE    table[index] = new Bucket(s, b, table[index]);   }   Object lookup(String s) {    int index=hash(s) % SIZE    for (Binding b = table [index]; b!=null; b=b.next)     if( s.equals(b.key)) return b.binding;    return null;   }   void pop(String s) {    int index=hash(s) % SIZE    table[index] = table[index].next;   } } まず問題文の意味がよくわかっていません。(テーブルをinsertとlookupへのパラメータにすることで複数のテーブルを使えるようにする?) 問題の丸投げになってしまうのですが、javaをやったことがなくどこに手を加えればよいのか全く分かりません。 どなたかわかる方、よろしくお願いします。

  • 文字列をハッシュにしなければならないのですが

    C言語にさ ファイルの中にある、3バイトunicodeの漢字文字列郡をハッシュテーブルに格納してハッシュを作りたいんですが、取っ掛かりすらつかない状況です。 とりあえず、配列から3バイトの16進数にして、後はその文字列分の16進数を足して、それを割ってキーをつくりテーブルにいれる、としようとしています。 配列から3バイトの16進数にする int joint(char a, char b, char c){ int join = 0; join = a<<8; join = (0x0000FF00 & join) + (0x000000FF & b); join = join<<8; join = (0x00FFFF00 & join) + (0x000000FF & c); return join; } このように16進数にするのですが、最初の取っ掛かりとしてのハッシュについては、どうやったらハッシュテーブルに格納でくるのかいまいちわからないのです。誰かわかりやすく教えてください。

  • JavaのObjectからintへの型変換について

    JavaのObject[][]からint[][]への型変換について、質問があります。 Jtableの表の中身を構成する要素【Object[][]】を取り出し、一部をint[][]として数字の条件と比較したいと考えております。 Object型の配列を簡単にintに変換できる方法は例えばどの様なものがあるのでしょうか? 教えていただけるとありがたいです。

    • ベストアンサー
    • Java
  • ハッシュ(オープンアドレス法) C言語の課題

    努力はしてみたのですが、C言語の課題ができません。教えていただけないでしょうか。 問:名前と年齢を入力し、名前をキーとしてハッシュ(オープンアドレス法)に登録する。'-'が入力されると登録を終了し、次に入力された名前をハッシュ法で検索し、あればその人のデータをハッシュから削除する、その後、ハッシュ表の内容を出力するプログラムを作成せよ。ただしハッシュ表の大きさは5とする。 例 koizumi  入力 1     入力 fukuda  入力 2  入力 aso 入力 3     入力 -     入力 koizumi  入力 fukuda(2) 出力 aso(3) 出力 ハッシュ関数は int hash(char *name) { int ret=0; while (*name)ret += *name++; return ret%5; } 再ハッシュ関数は int rehash(int h) { return (h+1)%5; } を使おうと考えています。 内容を理解できないと困るので簡単なプログラムをお願いします。 よろしくお願いします。

  • ハッシュのハッシュでデータベース

    ハッシュのハッシュになっているデータをファイルに書き出しておき、必要なときにまたプログラムから使いたいと思っています。検索スピードを問題にするほどの量ではありませんし、チェックのために時々は自分で読みたいので、どちらかといえばテキストデータのほうが便利かなあと考えていますが、特に決めてはおりません。 何か便利な方法がありましたら、教えて頂けないでしょうか。

  • レインボーテーブルとはなんですか?

    レイボーテーブルというのはどのようなものなのですか? ハッシュ値から、パスワードを入手するために、簡単な文字列を入れていき、同じハッシュ値になるか確かめるのですか? それともアルファベット順に調べていくのですか? また、同じSHA256でも、ハッシュ化する方法を変えていれば、既存のレインボーテーブルは使えなくなりますか?

  • 初めての(まともな)ハッシュ関数

     こんにちは。c#初心者です。  今回はハッシュ関数の質問なので、c, c++, c#, java(j#とかf#もあったっけ?)のどなたでも答えられるかと思います。  ハッシュ関数を調べてみたところ、いろいろな用途があるみたいですが、今回はハッシュテーブル用に使うので、 1:計算速度(←今回は多分O(1)になるはず&メソッドの呼び出しなし なので心配ないかと) 2:一様に分布すること  が、重要と思うのですが、上記の通り、2を優先したいと思います。  それで、今回のサンプルは struct Sample { // アクセス修飾子、その他もろもろ省略 readonly int Value; // Javaだったら readonlyじゃなくてfinallyだったかな? readonly int Index; }  こんな感じの構造体(別にクラスでも良い)なのですが、ハッシュ関数を今までまともに作ったこと無くて、ノウハウがありません。  一応いくつか超簡単なものを考えてみました。 パターンA return Value * Index パターンB-1 return Value | Index パターンB-2 return Value ^ Index パターンC return (Value ^ Index) + Index  ・  ・  ・ などです。  それぞれの数値の関係は大雑把に、 ・0 <= Value ・0 <= Index ・Value ≫ Index (非常に大きい)の確率が高 ・Value < Index のこともある です。  上記のもので、BやCあたり、特にCは比較的均等にばらつく気がするのですが、こんなのでいいのか、かなり不安です。  どなたか分かる人がいらっしゃいましたら教えていただけませんか?

  • int_table[]={}中身についての質問

    こんにちは、いつもお世話になっています。 今、int_table[]={} の中身をソートさせるプログラムを作っています。 そこで質問なのですが・・・例えば、 int_table[]={1,54,23} などでは、ソートすることが出来たのですが。 この中身を数字で入力する({1,54,23}のように)のではなく、 下記のように、0~100までのランダムな数字を10個入力させるようなことは出来るのでしょうか? for(i=0;i<10;i++)) printf("%d\n",GetRandom(0,100)) (このような中身をint_table[]の中へ入れることは可能なのでしょうか?。) よろしくお願いいたします。

専門家に質問してみよう