マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

TreeSetって内部でTreeMapを使ってたのか…(当然Hashも)

とあるプログラムを作ってた所、スタックオーバーフローが起こった。そして1000行ぐらい俺の作った再帰メソッドの名前が表示された後、たまたま呼び出していたTreeSetのaddまで表示されていた。↓がそのスタックトレースの一部


at java.util.TreeMap.compare(TreeMap.java:1553)
at java.util.TreeMap.put(TreeMap.java:560)
at java.util.TreeSet.add(TreeSet.java:230)
なんとTreeSetのaddの中でTreeMapのputを呼び出してるではないか!でドキュメントみたらTreeSetの説明で
このクラスは、TreeMap のインスタンスに基づく Set インタフェースを実装します。
と書いてあった(HashSetにも同じような説明があった)…今まで読んでるつもりで全く見えてなかったらしい。俺は今までずっとTreeMapがTreeSetを使ってるのかと思ってた…