JavaのString、StringBuffer、Charの中でメモリ
JavaのString、StringBuffer、Charの中でメモリの使用が一番良いものは?
Java初心者です。
現在JavaMEのMIDP(2.0)で辞書アプリケーションを作成しています。
携帯電話のメモリが小さいことから不向きではあると思っていますが、できるだけ多くの単語と説明を登録していようとしています。
基本的な文法は通常のJavaと同じだと思います。
大まかな構造は不要部分を省きますと、
-----
class Dictionary extend Canvas(){
int i,j,start=0,end=0,x=1;
private static Font fontL=Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_PLAIN,Font.SIZE_LARGE);
void paint(Graphics g){
//getsetsumei(x)で単語の意味・説明をString型で受け取っています。
//substringで一文字ずつ増やしながら文字の横幅をgetWidthで受け取り、
//描画画面横幅の最大値240を越えないように部分文字列で表示しています。
//文字の続きは文字サイズの縦幅をfontL.getHeight()で取得し、
//改行のような形で続けて表示します。
//また描画画面縦幅の最大領域getHeight()を越えて表示しないために
//i行目までに描画した文字列の縦幅の総和がこれを越えないようにすることで、
//無駄な描画をしないようにしています。
for(i=1;i!=0 && i*fontL.getHeight()<getHeight()-130;i++){//画面縦幅の描画範囲の判定
while(fontL.stringWidth(getsetsumei(x).substring(start,end+1))<240){//画面横幅の描画範囲の判定
end++;//横幅に達するまで文字数を増やす
if(end==getsetsumei(x).length()){//表示すべき文字列の取得が終わった
g.drawSubstring(getsetsumei(x),start,end-start,0,130+x,Graphics.TOP|Graphics.LEFT);
i=-1;//終了条件のi!=0を満たさなくするため
break;
}
}
//描画すべき文字列の一部をSubstringで描画
g.drawSubstring(getsetsumei(x),start,end-start,0,130+y,Graphics.TOP|Graphics.LEFT);
start=end;//次の行の描画すべき部分文字列の開始位置を指定
y+=fontL.getHeight()+1;//改行のためのy座標の移動
}
}
String getsetsumei(int DicNum){
switch(DicNum){
case 0:return " ";//説明無し
case 1:return "辞典,辞書,字引";//Dictionaryの意味、説明
}
}
}
-----
となっています。
実際は単語の意味をString型で返すgetsetsumeiの引数xの値を変化させて単語に合わせて意味を取得しようとしています。
改行するプログラムのためにgetsetsumei関数は何度も呼ばれることになるので、できるだけメモリを使用せず、高速にしたいと思っています。
色々調べたところStringは非可変文字列であるとのことでした。
これは説明内容が変更されるたびに別のメモリを確保するということでしょうか?
それとも同じメモリに新しい説明が上書きされるのでしょうか?その場合、StringではなくStringBufferを使用すべき、もしくはchar配列を使用すべきでしょうか?
どなたかご教授願います。
お礼
ありがとうございます。やはり難しいのですか。ノートとしてはこの仕様はかなり致命的な欠点だと感じます。 MSゴシックを使うことの利点は何ですか? 読みづらくて、メイリオを使っていますが・・・