So-net無料ブログ作成
  • ブログをはじめる
  • ログイン
スポンサーリンク

Javaの豆知識 「コレクションクラス(ArrayList・Vector)使用時の効率を考慮した注意事項 その1」 [備忘録]

データの初期格納

・初期値なし

例)
ArrayList ar = new ArrayList();

int limit = 1000000;

for(int cnt = 0; cnt

100万件の繰り返し処理結果 
クラス時間(マイクロ秒)
ArrayList()0.626
Vector()0.731


・初期値あり
例)
ArrayList  ar = new ArrayList(1000000);

int limit = 1000000;

for(int cnt = 0; cnt

100万件の繰り返し処理結果 
クラス時間(マイクロ秒)
ArrayList()0.468
Vector()0.485

Listは、生成時に指定された配列の要素数を超えてデータを追加しようとすると、 確保するのに十分な容量を割り当て、 現時点のデータを新たにコピーし直し、 新しい追加データを追加する。 という手順が必要になり、処理時間がよりかかる。 そのために、生成時に適切な配列を確保する必要がある。

Javaの豆知識 「ファイル作成処理」 [備忘録]

import java.io.IOException;
/**
* @author Shu_mei
*
*/
public class UploadObjectTest {

 public static void main(String[] args) {
  String text = new String("友の死\n寺田屋大騒動");
  UploadObject upload = new UploadObject("C:/temp/", ".txt", text.getBytes());
  try {
   upload.FileOut("test");
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author shu_mei
* ファイル作成クラス
*/
public class UploadObject {
 private byte uploadData_[];

 private String strContentType_;

 private String strDirectoryName_;

 public UploadObject(String strDirectoryName, String strContentType, byte uploadData[]) {
  strContentType_ = strContentType;
  strDirectoryName_ = strDirectoryName;
  uploadData_ = uploadData;
 }

 public void FileOut(String strFileName) throws IOException {
  FileOutputStream fos = null;
  try {
   fos = new FileOutputStream(strDirectoryName_.concat(strFileName).concat(strContentType_));
fos.write(uploadData_);
  } catch (Exception e) {
   throw new IOException(e.getMessage());
  } finally {
   if (fos != null) {
    fos.flush();
    fos.close();
   }
  }
 }
}


Javaの豆知識 「jarファイルのVIEW」 [備忘録]

jar tvf ファイル名

例:jar tvf test.jar


Javaの豆知識 「jarファイルの解凍」 [備忘録]

jar xvf ファイル名

例:jar xvf test.jar


Javaの豆知識 「Javaの日付変換処理」 [備忘録]

/**
* Date型に変換
* @param date 文字列(例:20050131)
* @return Date 指定の書式に変換された日付
*/
private Date _dateFormat(String date){

 Date d;
 try {
  d = new SimpleDateFormat("yyyyMMdd").parse(date);
 } catch (ParseException e) {
  return null;
 }

 return d;

}

/**
* String型に変換
* @param target Date型
* @return String 指定の書式に変換された日付の文字列
*/
public String _stringFormat(java.util.Date target) {

 String pattern = "yyyyMMdd";
 String result = new SimpleDateFormat(pattern).format(target);
 return result;

}


Javaの豆知識 「Javaの日付計算」 [備忘録]

Javaの日付の計算は、ミリ秒に換算して行います。

/**
* 日付計算
* @param hnnyYmd
* @param hkwYmd
* @param chsiYmd
* @return String 計算結果
*/
private String _calcDate(String hnnyYmd, String hkwYmd, String chsiYmd){

 // Date型に変換
 Date hnnyDate = _dateFormat(hnnyYmd);
 Date hkwDate = _dateFormat(hkwYmd);
 Date chsiDate = _dateFormat(chsiYmd);

 if(hnnyDate==null || hkwDate==null || chsiDate==null){
  return "";
 }

 Calendar hnnyCal = Calendar.getInstance();
 hnnyCal.setTime(hnnyDate);

 Calendar hkwCal = Calendar.getInstance();
 hkwCal.setTime(hkwDate); 

 Calendar chsiCal = Calendar.getInstance();
 chsiCal.setTime(chsiDate);

 // 搬入日と引渡日の差をミリ秒で取得
 long ms = hkwCal.getTimeInMillis() - hnnyCal.getTimeInMillis();

 // 日数に換算
 int day = (int)(ms/1000/60/60/24);

 // 調整日に加える
 chsiCal.add(Calendar.DATE, day);

 return new SimpleDateFormat("yyyyMMdd").format(chsiCal.getTime());
}


SQLのテクニック 「バインド変数の値」 [備忘録]

select
品名コード品名
from 品名マスタ
where 0=0 AND ((:リスト = '1')
OR (:リスト = '2' AND 区分 = 'K')
OR (:リスト = '3' AND 区分 = 'L'))


SQLパフォーマンス 「NOT EXISTS / NOT IN構文のパフォーマンスについて」 [備忘録]

実行計画を見ると、NOT EXISTS構文では相関副問い合わせにINDEXを使用しているのに対し、 NOT IN構文では副問い合わせにフルテーブルスキャンを行っている。

その影響を受け、NOT IN構文は、NOT EXISTS構文の場合に比べアクセスデータ量が20倍以上になっている。実行時間はおよそ200倍。よってこの場合はNOT EXISTS構文を使用するべきである。また実現性の面で見ても、十分耐えられると判断できる。

もし他の場面でNOT EXISTS構文を使用する場合は、相関副問い合わせ内のテーブルにINDEXを作成することにより、その処理時間を大幅に削減できる。


dynabook V9/W14LDEWのTips 「内蔵無線LANの交換」 [備忘録]

PCカードを買うより、手軽ですし安いです。せっかくの内蔵タイプなので、活用して下さい。

1.内蔵無線LANを購入します。私は、下記の商品を秋葉原のDOSPARAで3,790円で購入しました。

インテル(R) PRO/Wireless 2200BG ネットワーク・コネクション (802.11b/g デュアルモード)

2.本体の電源を落とし、本体がAC電源で繋がれていたら外して下さい。次に身体から静電気を逃がす為に金属に触って下さい。

3.本体背面の無線ON/OFFスイッチ付近に『Wi-Fi』と書かれたステッカーの貼られたカバーがネジ一本で止まっていますので、それを外します。

4.すると標準の2100のカードが見えますので、アンテナ端子のシールを取りアンテナを2本抜いて下さい。アンテナは、真上から抜きます。間違っても引っ張って抜くとは考えないで下さい。

5.その後、メモリのようにPCIカードを外し2200BGと入れ替えます。

6.あとは外したのと逆の手順でアンテナを挿せばOKです。

7.起動すると、ウィザードが起動しますので付属のドライバCDを入れて、ドライバをインストールします。起動時のcentrinoのロゴがpentium-Mのロゴになってしまっていますが、これはそういう仕様です。むしろ正しく認識していると考えて下さい。

8.ネットワークの設定をし直します。SSIDの設定やWEP等セキュリティを設定していたら、再設定して下さい。

9.次にドライバの更新をします。下記のHPにSonyのVaio用の2200BGのWireless LAN Driverのアップデートがありますので、ダウンロードします。通信速度が安定する上に、詳細設定が日本語表記になるので使いやすくなります。Vaio用に公開されてますが、問題ありません。

http://vcl.vaio.sony.co.jp/download/PK-000414-00.html


WinCVSのTips 「CVSコマンド」 [備忘録]

CVSファイルの削除

1.cvs remove ファイル名

例:cvs remove test.java

2.cvs commit ファイル名

例:cvs commit test.java

CVSファイルの更新

1.cvs update -r ヴァージョン ファイル名

例:cvs update -r 1.2 test.java

CVSファイルの新規取得

1.cvs update -d

CVSファイルのコミット

1.cvs commit -f -R

コマンドの意味

* fは、ファイルが更新されていなくても、強制的に更新する。
* Rは、カレントディレクトリだけでなく、サブディレクトリも更新する。

CVSのTagの取消

1.cvs -q update -A ファイル名

例:cvs -q update -A test.java



スポンサーリンク