Java

テスト駆動開発入門

昨日からケント・ベック著の「テスト駆動開発入門」を読みながら写経しています。 翻訳本のため、おかしな表現などは見られますが大変分かりやすく、楽しく進められています。 テスト駆動でコーディングすることは、自分自身の不安を取り除く効果もあるそう…

Sun認定Javaプログラマ試験(SJC-P)を受けてきた

受験チケットを購入してから8ヶ月、今日、ようやく受験してきました。この1週間、風邪を引いて体調がとっても悪かったのですが、勉強だけは継続していました。そして今日、無事に合格しました。万全をとって3時間前から受験会場の近くのカフェで勉強していた…

初期化のタイミングについて

変数の初期化タイミングについても、みんな当たり前のように知っていると思うけど、非短絡論理演算子のように度忘れしたり、たまに疑問になったりしませんか。ということで、ちょっと動かしてみました。 class Parent{ {System.out.println("parent1 ");} pu…

非短絡論理演算子について

普段、自分がよく使う論理演算子は「&&」,「||」 や「!」ですが、論理演算子には他にも非短絡論理演算子「&」,「|」があります。 ふと、あまり見慣れていない「&」,「|」が使われたコードを見ると、どういう動きをするんだっけと考えてしまうのは自分だけで…

Javaの処理時間を計測する方法

前回エントリ(2009-01-14 - greennoahの日記)ではArrayListとHashSetの処理にかかる時間を、単純にStartとEndの現在時刻を標準出力したものでしたが、Javaの処理時間を計測する場合はSystemクラスのcurrentTimeMillisメソッドを使用した方が良いと思います…

大量データを扱うときはArrayListよりHashSetを使おう

最近は性能問題が徐々に収束してきました。 解決された問題のうちの1つをここで紹介したいと思います。「あるバッチプログラムの性能要件が100万件のデータを60分で処理しないといけない」というものがあったのですが、計測してみると2.5時間で40万件弱しか…

jhatを使ってヒープダンプを解析するときの注意

今週はずっとメモリリークの調査をしていました。その時に使ったツールjhatにおいて注意する点があったのでメモしておきます。今回はjmapコマンドで取得したヒープダンプをjhatで解析しました。jhatではヒープのヒストグラムを見てインスタンス数やインスタ…

続・ユークリッドの互除法を使って2つの整数の最大公約数を求める(再帰編)

今度は、再帰を使って書いてみました。 まずは、減算を用いたユークリッド互除法です。 public class Euclid { private static int count; public static void main(String[] args){ try{ int m = Integer.parseInt(args[0]); int n = Integer.parseInt(args…

ユークリッドの互除法を使って2つの整数の最大公約数を求める

2つの整数m、n(m > n)をユークリッドの互除法を使って、mとnの最大公約数を求めます。 減算を使った場合のアルゴリズムは次のようになります。 1.mとnが等しくないあいだは次を繰り返す 2.m > nの場合 m = m - n それ以外 n = n - m 3.m(もしくはn…

続・フィボナッチ数列を生成するプログラム

前回のエントリーでは、再帰手続きを使って書いたのですが、これだとnが増えるごとに計算時間はどんどん遅くなってくるので実用に耐えないアルゴリズムであることは明白です。今度は配列を使って、一度計算したフィボナッチ数を記憶させてやりました。 publi…

フィボナッチ数列を生成するプログラム

フィボナッチ数は一般的に下記のとおりに定義されます。 f_0 = 0、f_1 = 1 f_n+2 = f_n + f_n+1 (n >= 0) これを冗長性を無視して、再帰手続きを使ってJavaで書いてみました。 public class Fibonacci { /** * フィボナッチ数列を生成するプログラム * @para…

続・ニュートン法による平方根の計算

前回エントリーのコードでforループを使ったところを再帰で書いてみました。 あと、Mathクラスを使わないように変更してみました。import java.io.*;/** * ニュートン法による平方根の計算 * */ public class Newton { private static final double EPS = 1.…

ニュートン法による平方根の計算

ニュートン法は、関数 f(x) とその導関数 f'(x) が与えられたとき、方程式f(x)=0 の解を求めるといったもの。 x_n+1 = x_n - f(x)/f'(x) に f(x) = x^2 - a を代入して簡約すると x_n+1 = (x_n + a / x_n) / 2 となり、これを指定した誤差以内になるまで反復…

Eclipseプラグインq4eを使ったWebアプリケーションの作成方法

以前のエントリーに書いたStruts・イン・アクションをオススメしてくれたMさんに、q4eというEclipseプラグインを使って簡単にStrutsプロジェクトの作成方法を教わったのでメモします。環境 1.JDKをインストール 2.Eclipse for JavaEEをインストール 3.Eclip…

JavaのtoArrayメソッド

自分用のメモとして Object[] toArray() 引数aの配列の長さがコレクションの要素数を上回っている場合、 すべての要素が格納され、最後の要素の次の要素の次の位置にnullが設定されます。 標準APIの日本語訳では、「最後の要素以降すべてがnullに設定される…

抽象化プログラミング入門を読んだ

同僚に「UMLとプログラムをマッピングさせて、考えることがなかなかできない」と相談したときに、お勧めされた豆蔵・著の書籍。構成としては、3部構成となっており『モデルからコードへのマッピング』をテーマとして掲げている。分かりやすい構成で順次読み…

ミリ秒まで含んだ時刻文字列を返す

エロと風俗情報満載 どう抜く?のお題を解いてみた。 Javaで時刻を取得する方法は数パターンあるけど、今回はCaledarクラスを使用して書いた。 Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MO…

文字列から日付解析を厳密に行う方法

文字列からテキストを解析してDateを生成するときに、日付解析を厳密に行う場合は setLenientメソッドにfalseを与えて呼び出すことによって、このフォーマットを厳密に要求できる。正常パターン try{ SimpleDateFormat format = new SimpleDateFormat("yyyyM…

Mapのエントリを取得する

MapからKeyを取得する時はkeySet()、Valueを取得する時はvalues()を 使用する。その他にMap.Entry(K,V)という型からgetKey()、getValue()として 取得することもできる。 // MapとしてHashMapのインスタンスを生成 Map map = new HashMap();// 要素の追加(add…