プログラミングいちねんせい

プログラミング初心者が優雅にもがく軌跡です

長期出張が終わりました

6ヶ月の出張を終えました。新規事業の勉強や移行もありますがプログラミングへの興味は尽きていないので、またぼちぼちと触りたいと思います。半年近くプログラミングから離れていたので、また書籍を最初から眺めて遊んでいます。

プライベートでは6ヶ月のあいだに彼女と別れて、新しい出会いから付き合い始めたりといろいろありましたが、そんななかJAVA 9がリリースされたと知って驚きました。ラムダ式やStream APIをさっき触ったばかりです。今年はなにかしらのAndroidアプリを作ってみたいなあ。

演算子とStringBuilderで文字の連結の速度の違いを測定してみました

前回の続きです。ご存じない方は下記からご覧ください。

System.nanoTime()とSystem.nanoTime()

JAVAで速度計測するには代表する2つのメソッドがあるようです。それがSystem.currentTimeMillis()メソッドとSystem.nanoTime()メソッドです。それぞれの違いは数値の精度にあるようなので今回はSystem.nanoTime()を利用します。System.nanoTime()の2回目の取得時間から1回目の取得時間を引いて1000で割ったものがミリ秒になるので、それぞれを変数startendに代入して(end - start) / 1000としました。

最初は簡単な文字連結で試したのですが、あまりにも早すぎたのでforで2000回連結してみました。

今日は時間がないので結果を簡単に書きます。

プラス演算子で文字連結したOperator.javaを5回計測した平均値は14110226ミリ秒でした。 StringBuilderで文字連結したStringBuilder.javaを5回計測した平均値は14139477ミリ秒でした。

なぜかStringBuilderのほうが遅いという結果に終わりました。

疑問

  • for文での文字の連結の書き方が間違ってる?
  • System.nanoTime()の使い方が間違ってる?
  • 2000回程度では両者に差は出ない?

あとがき

モヤモヤが残ったのでまた試したいです。

初めてのコマンドプロンプトからのHello World!

北海道で温泉と魚介を堪能してリフレッシュしました!前回はJDKが期待通りに動かずにエラーが出てしまい途方に暮れた結果Windowsの再インストールを視野に入れたところで終わりました。というわけで続きです。

Windowsの再インストー

友達に聞いたところ「HDDのフォーマットとインストール自体は30分くらいで終わるけどUpdateに3~4時間はかかるよ」とアドバイスをもらったのでフォーマットとインストールは朝の支度のあいだに終わらせてWindows Updateを開始させてから仕事に行きました。帰宅後、無事に100件以上のUpdateが終わっていて一安心です。再起動させて追加でいくつかUpdateを終わらせました。そのあとはグラフィックドライバ、サウンドドライバと指示通りにインストールを済ませ、ひとまず終了です。

JDKのインストー

初心者はJDKやらJREやらに惑わされますが、結論から言うとJDKをインストールすればJREは必要ありません。JDKJAVAの開発環境を提供してくれます。その中には実行環境も含まれているのでJREも同梱されているというわけです。JAVAでコードを書くならばJDKのインストールだけでいいというのは勉強になりました。環境変数のPATHをJDKの実行ファイルのフォルダを指定したら早速テキストファイルでJAVAを書きます。

夢のHello World!

おなじみのHello World!の表示です。ファイルをCドライブ直下に作成したWorkフォルダに置いてテストをしました。コマンドプロンプトからjavac Main.javaを実行するとコンパイルが成功してWorkフォルダにあるclassファイルを確認しました。嫌な記憶が蘇りますが次にjava Mainと実行します。そして……Hello World!と表示されました!成功です!今までclassファイルの存在も知らずにEclipseに任せていたんですが、ここにきてやっとコンパイルしてからファイルを実行するという実感を得ました。

あとがき

明日はjavapや速度実測をやってみようと思います。