Java読書会BOF「Javaコードアンチパターン 初級からプロまで知っておきたいミスと回避策」を読む会 第7回議事録

[ 戻る ]


=====================================================
Java読書会BOF「Javaコードアンチパターン 初級からプロまで知っておきたいミスと回避策」を読む会 第7回議事録
=====================================================
.. csv-table:: 開催概要

  "日時", "2026年8月29日 10:00 - 17:00"
  "場所", "エポックなかはら 第2会議室"
  "出席者(敬称略)", 高橋(徹)、遠藤、岩室、井上、高橋(智)(書記)"

第8章:コレクションとマップ
=======================

8.6 No.74:キーとして変更可能なオブジェクトを使う
-------------------------------------------
* P252 HotspotJVMのデフォルトのhashCode()の分布が良好なのは、どのような実装になっているからだろうか?
  * ObjectクラスのhashCode()メソッドはnativeメソッドになっている
    * OpenJDKのソースコードについて確認する。宿題!! 

* P253 HashSetのJavadocには赤黒ツリーを使用することが明記されているのか?
  * 書かれていないようだ
  * 参考記事: https://www.geeksforgeeks.org/java/hashset-in-java/
    * Note: HashSet handles collisions using chaining (LinkedList) and converts it into a balanced tree (Red-Black Tree) when the number of elements in a bucket exceeds a threshold (Java 8+).
  * Red-Black Tree(赤黒木): https://ja.wikipedia.org/wiki/%E8%B5%A4%E9%BB%92%E6%9C%A8

8.7 No.75:HashMapやHashSetの出現順序に依存する
-------------------------------------------
* P255 「仮想マシンを再起動するたびに順序がランダム化されます」とはどのような意味か?
  * 検証用コードを記述・実行して、試してみる。宿題!!

8.9 No.77:List.remove()のオーバーロードを混同する
---------------------------------------------
* P260 Javaの各種ランタイムのメソッドには、作成者の名前は記載されているのか?
  * クラスやインターフェースには作成者の名前が載っているようだが、メソッドには無さそう
  * Javadocでは、メソッドには@authorタグを書いても無視される(利用されない)
  * JavaDoc Documentation Comment Specification for the Standard Doclet (JDK 27)
    * https://download.java.net/java/early_access/jdk27/docs/specs/javadoc/doc-comment-spec.html

8.10 No.78:List.remove()の後で次の要素を飛ばしていまう
--------------------------------------------------
* P262 ソースコードで「i--;」と「++i;」の後置・前置が混在しているのはなぜ?

第9章:その他のライブラリメソッド
============================

9.1 No.82:charをStringBuilderコンストラクタに渡す
----------------------------------------------
* P276 StringBuilderクラスのコンストラクタに、char型を引数に取るオーバーロード版が実装追加されないのはなぜ?
  * append()メソッドにはあるのに!!
    * 既存の利用コードとの互換性を保つためだろう
  * StringBufferも同じパターンなのか?
    * 同じ: https://download.java.net/java/early_access/jdk27/docs/api/java.base/java/lang/StringBuffer.html

9.2 No.83:ストリームAPIの処理連鎖内で副作用を発生させること
-----------------------------------------------------
* P277 ストリームの中間操作の中での副作用は推奨されない、とあるが、その副作用の定義とは?
  * java.util.streamパッケージのJavadocに書いてある
    * https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/util/stream/package-summary.html
    * Side-effects in behavioral parameters to stream operations are, in general, discouraged, as they can often lead to unwitting violations of the statelessness requirement, as well as other thread-safety hazards. 

* P278 Collectors.partitioningBy()メソッドは、true/falseの2分割しかないが、3つ以上の分割が可能なメソッドはあるのか?
  * Collectors.groupingBy()メソッドが使えそうだ
    * https://docs.oracle.com/en/java/javase/26/docs/api/java.base/java/util/stream/class-use/Collector.html

* P279 Streamの処理連鎖のメソッド呼び出しの評価順については、2016年にJava読書会で読んだ「Javaによる関数型プログラミング」で解説されている
  * 議事録: http://www.javareading.com/bof/java8function3.html
  * https://www.oreilly.co.jp/books/9784873117041/

9.3 No.84:ストリームを2回消費する
-------------------------------
* P281 IllegalStateExceptionのスタックトレースの内容を出力して確認すれば、ストリームの再利用をしたことによる例外送出であることが認識出来るのだろうか?
  * 実際にコードを書いて検証してみる。宿題!!

次回は、P290の「9.7 No.88 : enum、アノテーション、クラスに対してgetClass()を使う」から。


[ 戻る ]