Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで
Metadata
- Author: 谷本 心、阪本 雄一郎、岡田 拓也、秋葉 誠、村田 賢一郎、Acroquest Technology株式会社
- ASIN: B071D8RYR5
- Reference: https://www.amazon.com/dp/B071D8RYR5
- Kindle link
Highlights
役割を考えると、変数は名詞、メソッドは動詞で命名するのが原則 — location: 1100 ^ref-42313
// 小数点はデフォルトではdouble型と — location: 1183 ^ref-33479
プリミティブ型はオブジェクトではなく、単なる値であり、それ自身はメソッドを持ちません。しかし、プログラムの中では、プリミティブ型の値に対する操作(文字列との相互変換など)が必要になる場面がたくさんあります。 そこでJavaは、プリミティブ型を内包し、そのプリミティブ型の値を操作する機能を備えた「ラッパークラス」を提供しています。 — location: 1257 ^ref-27667
0とデータがない状態(空)を区別したい場合は、ラッパー型を用いる必要があることがわかり — location: 1302 ^ref-12947
言語によっては-1で配列の末尾の値が取得できるものもありますが、Javaでは例外となる点に注意して — location: 2097 ^ref-18717
配列は、一度作成してしまうと要素数を変更することができません。そのため、すでに作成した配列の要素数を変更したい場合には、新しい配列を作成したうえで、古い配列から新しい配列に必要な情報をコピーする必要があり — location: 2098 ^ref-63895
Comparableインタフェースを実装したクラスでない場合や、並び順を指定したい場合には、第2引数にjava.util.Comparatorインタフェースを実装したクラスを渡すことで、独自ルールに従った並び替えをおこなうことができ — location: 2149 ^ref-40338
・戻り値が0未満の数値を返した場合 → 第2引数→第1引数の順に並び — location: 2159 ^ref-5564
上の言ってることがよくわからない。 正が返ってきたら、第二引数が前に来るのが正しい動き(逆になる)
・Comparableによるソート → そのクラス自身の最も自然な並び方によるデフォルトソートとして利用する ・Comparatorによるソート → 業務的に必要な並び方によるソートとして利用 — location: 2198 ^ref-2420
ただし、一般的に線形検索は処理が遅いため、要素数が多い場合や頻繁に検索する必要がある場合は、後述する検索処理をおこなうほうがいいでしょう。要素の重複がないのであれば、Setインタフェースを用いたほうが、より高速に検索でき — location: 2368 ^ref-50650
indexOf , containsは線形検索
ArrayListクラスが持つ配列の長さはコンストラクタで指定することができますが、指定しない場合は長さが10となります。 — location: 2434 ^ref-51763
一方で、リストの途中に要素を追加/削除する処理は、あまり高速にできません。配列の途中に要素を追加しようとすると、それ以降の要素をすべて1つずつ後ろへずらさなければいけないわけですから、その処理に時間がかかってしまうの — location: 2441 ^ref-58763
このような構造であるため、LinkedListにはArrayListのような初期サイズの概念はありません。あくまでも、要素が増えるたびにリンクを更新するだけです。 そのため、性能の特性として、LinkedListはArrayListとほとんど逆の性質を持っているといえます。つまり、リストの途中に要素を高速に追加/削除できる一方で、インデックスを指定して要素を代入/取得する処理には時間がかかってしまい — location: 2451 ^ref-21733
一方、CopyOnWriteArrayListクラスは、iteratorやfor-each文を使ったループをおこなう際に、元のリストのコピーを作成し、そのコピーに対してループをおこない — location: 2472 ^ref-10622
なお、CopyOnWriteArrayListクラスは、ArrayListクラスとほぼ同等の性能が出ます。ただし、CopyOnWriteArrayListクラスでは、要素を追加/変更/削除する時に内部的に持っている配列をコピーするため、ArrayListクラスと比較すると性能は悪くなり — location: 2476 ^ref-14919
Listと同様、Mapにも初期値を指定する方法がありません。 — location: 2505 ^ref-47771
HashMapでは要素の位置をハッシュによって計算するため、キーをそのまま扱うほかのクラスに比べて、高速に処理できます。ただし、要素を追加する際にハッシュテーブルのサイズを拡張する処理と要素の追加処理が同時におこなわれた場合、無限ループに陥る場合があり — location: 2563 ^ref-32046
コントラクタの引数にコレクションを渡して、コレクションをSetに変換し — location: 2621 ^ref-37561
じつはSetの内部にはMapが存在し、Setに追加された要素はMapのキーとして保持され — location: 2696 ^ref-27148
LinkedListはDequeの性質を持っており、Dequeインタフェースを実装してい — location: 2742 ^ref-62074
Stream APIは「作成」「中間操作」「終端操作」の3つの操作からできてい — location: 2766 ^ref-64955
Java 8では、実装するべきメソッドが1つしかないインタフェースを「関数型インタフェース」という名前で扱うことができ — location: 2817 ^ref-18391
ラムダ式では、代入先の関数型インタフェースから実装すべきメソッドと、そこで定義されている引数の型がわかるので、メソッドの引数の型を省略でき — location: 2839 ^ref-53836
引数が1つしかない場合は、引数の丸括弧( )も省略でき — location: 2844 ^ref-36716
メソッド参照は、「代入先の関数型インタフェースの引数の数と型が一致していれば、そこにメソッドを代入できる」というルール — location: 2879 ^ref-3265
戻り値はStream<List>となり、この後の処理単位はListになり — location: 3013 ^ref-21127