スッキリわかるJava入門 実践編 - 1日目

先輩から借りた。

スッキリわかるJava入門 実践編 第2版

スッキリわかるJava入門 実践編 第2版


入門と、実践編買ってて、先に入門読むから、と実践編を読む前に貸してくれた。
全て写経してると時間がかかってしまうので、気になるところだけコード確認。

第1章 文字列の操作

  • + < |超えられない壁| < StringBuffer < StringBuilder
  • threadを使う場合にStringBuilderだと不都合な場合

第2章 日付と時間の取り扱い

  • Java8からDate、CalendarからTime API
package sukkirijava;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

public class SukkiriJava {

    public static void main(String[] args) {
        dateCalendar();
        timeApi();
    }

    public static void dateCalendar() {
        Date now = new Date();
        Calendar c = Calendar.getInstance();
        c.setTime(now);

        int day = c.get(Calendar.DAY_OF_MONTH);
        day += 100;
        c.set(Calendar.DAY_OF_MONTH, day);
        Date future = c.getTime();
        SimpleDateFormat f = new SimpleDateFormat("西暦yyyy年MM月dd日");
        System.out.println(f.format(future));
    }

    public static void timeApi() {
        LocalDate now = LocalDate.now();
        LocalDate future = now.plusDays(100);
        DateTimeFormatter f =
            DateTimeFormatter.ofPattern("西暦yyyy年MM月dd日");
        System.out.println(future.format(f));
    }
}

第3章 コレクション

  • プリミティブ型はコレクションに格納できないが、オートボクシングによって格納したように見せかけている
  • 拡張for文を使わずiteratorを使う理由は、ループ中にremoveが使えるからか
  • ArrayListとLinkedListにはそれぞれ得手不得手がある
    • 要素の挿入、削除はLinkedList、指定位置要素の取得はArrayList
  • Setは順番が保証されないので注意
  • コレクションに格納された後の参照型の取り扱いに注意

第4章 インスタンスの基本操作

  • クラスを作ったらequals()をオーバーライドしておく
    • 等価判定することが考えられない場合は除く
    • equals()による等価判定はコスト大
  • HashSetはhashCode()のオーバーライドで
  • Collections.sortなど、比較のためにはComparableインターフェイスを実装し、compareToメソッドを定義
  • マーカーインターフェイス
  • shallow copydeep copy に気を付ける

今日の感想

評価が高い本だとはネット見てたが、今のところは本当に読みやすい。
時間についての取り扱いが面倒過ぎる。
Javaを触っていると、Ruby便利だな、と思ってしまう。