とあるプログラムを作ってた所、スタックオーバーフローが起こった。そして1000行ぐらい俺の作った再帰メソッドの名前が表示された後、たまたま呼び出していたTreeSetのaddまで表示されていた。↓がそのスタックトレースの一部
なんとTreeSetのaddの中でTreeMapのputを呼び出してるではないか!でドキュメントみたらTreeSetの説明で
at java.util.TreeMap.compare(TreeMap.java:1553)
at java.util.TreeMap.put(TreeMap.java:560)
at java.util.TreeSet.add(TreeSet.java:230)
このクラスは、TreeMap のインスタンスに基づく Set インタフェースを実装します。と書いてあった(HashSetにも同じような説明があった)…今まで読んでるつもりで全く見えてなかったらしい。俺は今までずっとTreeMapがTreeSetを使ってるのかと思ってた…