○Hashtableを使った郵便番号検索アプレットの考察
そもそも新しいWindows10のブラウザではアプレットが動かないみたいですね
import java.util.*;
null オブジェクト以外であれば、どのオブジェクトでもキーや値に使用することができます。
Hashtable table = new Hashtable();
table.put("key","data"); 値を入れる
String ans = (String)table.get("key"); keyで検索 値がなければ null が返ってきます。
table.remove("key"); キーと値の削除、キーがハッシュテーブルにない場合は、何も行いません。
int = table.size() ハッシュテーブルにあるキーの数を返します。
Hashtableの郵便番号検索アプレットの考察
郵便番号テストデータはいいかげんに作成されています
郵便番号 → 住所
住所 → 郵便番号
5000000 → 岐阜県岐阜市以下に記載がない場合
のような感じで高速に検索できます。
検索にはhashtableを使っています。
htmlファイルに<applet code="test" archive="testlib.jar" width=200 height=200></applet>をいれて、
c:\>HtmlConverter
によりhtmlファイルをjava Plag-in 対応に処理しました。
jar cf testlib.jar *.class data.csv
によりjarファイルを作成しました。
data.csvファイルの内容の抜粋
03201,02001,0200133,イワテケン,モリオカシ,アオヤマ,岩手県,盛岡市,青山,0,0,1,0,0,0
03201,020,0200801,イワテケン,モリオカシ,アサギシ,岩手県,盛岡市,浅岸,0,1,0,0,0,0
03201,020,0200014,イワテケン,モリオカシ,アタゴシタ,岩手県,盛岡市,愛宕下,0,0,0,0,0,0
03201,020,0200013,イワテケン,モリオカシ,アタゴチヨウ,岩手県,盛岡市,愛宕町,0,0,0,0,0,0
このアプレットのソースです。
import java.io.*;
import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;
import java.net.*;
public class test extends Applet {
TextField textField1;
Label label1;
Label statusLabel;
String _FileName="data.csv";
Hashtable table = new Hashtable();
Thread tView;
public void init(){
setLayout(new BorderLayout());
textField1 = new TextField("");
this.add(textField1,"North");
label1=new Label("",Label.LEFT);
textField1.setEditable(false);
textField1.setEnabled(false);
this.add(label1,"Center");
statusLabel=new Label("データファイルを読み出し中",Label.CENTER);
this.add(statusLabel,"South");
// textField1.addActionListener(new ActionListener(){
// public void actionPerformed(ActionEvent e){
// String str=textField1.getText();
// String ans = (String)table.get(str);
// System.out.println(ans);
// }
// });
textField1.addTextListener(new TextListener(){
public void textValueChanged(TextEvent e){
String str=textField1.getText();
String ans = (String)table.get(str);
// System.out.println(ans);
if(ans!=null){
label1.setText(ans);
}else{
label1.setText("該当なし");
}
}
});
repaint();
tView = new Thread(){
public void run(){
try{
while(true){
label1.setText("読み込んだレコード:"+(int)(((double)table.size()/(double)239621)*100)+"%");
Thread.sleep(100);
}
}catch(Exception e){}
}
};
tView.start();
Thread t = new Thread(){
public void run(){
netRead();
tView.interrupt();
try{
Thread.sleep(500);
}catch(Exception e){}
label1.setText("");
statusLabel.setText("準備完了 レコード数:"+table.size());
textField1.setEditable(true);
textField1.setEnabled(true);
}
};
t.start();
}
public void paint(Graphics g) {
}
public void netRead(){
try{
// URL u = new URL(getCodeBase()+_FileName);
URL u= test.class.getResource(_FileName);//リソースの場合の読み込み
InputStream is = u.openStream();
InputStreamReader isr = new InputStreamReader( is );
BufferedReader br = new BufferedReader( isr );
//ファイルからデータを読み込める間繰り返す
while( br.ready() ){
CSV(br.readLine());
//System.out.println( br.readLine() ); //1行読み込んで表示する
}
//ストリームを閉じる
br.close();
isr.close();
is.close();
} catch ( Exception e ){
System.out.println("err");
}
}
public void CSV(String str){
String data[]=new String[20];
int j = 0;
StringTokenizer stringTokenizerTest = new StringTokenizer(str, ",");
while(stringTokenizerTest.hasMoreTokens()) {
data[j]=stringTokenizerTest.nextToken().toString();
j++;
}
// System.out.println(data[2]+" : "+data[6]+data[7]+data[8]);
table.put(data[2],data[6]+data[7]+data[8]);
table.put(data[6]+data[7]+data[8],data[2]);
}
}
▲トップページ
>
JAVA関連