2012-01-22 7 views
0

非常に大きなファイル(50MBなど)を処理するために必要なアンドロイドアプリを作成しています。このファイルには、userid、artistid、およびユーザーがそのアーティストを聴いた回数の3つのエントリが含まれています。だから今では、最も人気のあるアーティストがアーティストの声を聞いた回数に基づいて誰が誰であるかを調べるコードを書いています。私はアーティストID(キー)と聞いた回数(値)のそれぞれをハッシュマップすることでこれを達成します。 ファイルが20B未満であればコードは正常に動作します(Nexus S 4gでアプリケーションを実行するので、ヒープは32MBです)。しかし、大きなファイルの場合は「メモリ不足」というエラーが発生します。私はコードが非常にひどく書かれていることを認識します。どのように私はこの問題を乗り越えることができるかに関する任意の提案!大きなファイルを処理するには

while ((text = inRd.readLine()) != null) { 
      StringTokenizer st = new StringTokenizer(text); 
      while (st.hasMoreTokens()) { 
       int userid = Integer.parseInt(st.nextToken()); 
       artistid = Integer.parseInt(st.nextToken()); 
       int no_times = Integer.parseInt(st.nextToken()); 
       if (hm.containsKey(artistid)) { 
        Integer oldval = (Integer) hm.get(artistid); 
        Integer newval = no_times + oldval; 
        hm.remove(artistid); 
        hm.put(artistid, newval); 
       } else 
        hm.put(artistid, no_times); 
      } 
     } 
+1

を支援しますか? – waqaslam

+0

私はsqliteを認識していませんでした。私はそれを撃つでしょう。あなたの提案をありがとう.. – idok

+0

ええ、それを与える。それは確かにあなたにコードを究極の喜びを与えるでしょう:) – waqaslam

答えて

1

ハッシュマッピングは物事を保存する最も効率的な方法ではありません。ベクトルまたは直線配列を試してみてください。 希望これはあなたのsqliteにあなたfile'sデータを変換し、あなたがやりたいしない理由

クリフ

+0

そう、私はそれで私の運を試してみましょう!ありがとうございました.. – idok

関連する問題