请教下各位为什么TreeSet可以在底层调用TreeSet的put方法

今天看了一下TreeSet的源码,
发现TreeSet的add方法通过NavigableMap接口实例调用了TreeMap的put方法
但是TreeSet并没有实现NavigableMap接口或者继承TreeMap。
为什么可以这么调用呢

TreeSet 的内部变量是 TreeMap实现的,它实际的操作都是通过这个内部变量实现的。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7734495
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:TreeSet 和TreeMap排序问题
  • 除此之外, 这篇博客: TreeSet与TreeMap实现自定义比较器中的 3.TreeSet的默认排序与自定义比较器 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •       TreeSet的底层实现相似于TreeMap,可以将TreeSet看作TreeMap的vlalue值为object,而TreeSet值可以认为TreeMap的键,依次可以知道,TreeSet的比较用法;

  • 以下回答由chatgpt基于相关博客总结生成:

    TreeSet实现了SortedSet接口,而SortedSet继承自Set接口,所以TreeSet间接地继承了Set接口。SortedSet接口中定义了很多按照不同排序方式排序的方法,其中包括naturalOrder()方法和comparator()方法。TreeSet类实现了这些方法,而这些方法正是通过调用TreeMap的对应方法实现的。在调用TreeSet的add方法时,add方法会根据是否定义了Comparator来决定用naturalOrder还是Comparator来排序。因此,TreeSet可以使用TreeMap的方法,是因为它实现了SortedSet接口,并重写了SortedSet中声明的方法。至于TreeSet的逻辑实现,它的底层使用了TreeMap来实现,TreeSet集合中存储了不包含值对象的TreeMap对象。