> For the complete documentation index, see [llms.txt](https://yangsx95.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yangsx95.gitbook.io/notes/programming-language/java/ji-he/set/treeset.md).

# TreeSet

![image-20220303190101770](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-2efb8d6803decac19608cb1a3cd7f118216710a8%2Fimage-20220303190101770.png?alt=media)

![image-20220303194011820](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-64396a1e9882f0bb50df4df3d55342215b14b548%2Fimage-20220303194011820.png?alt=media)

**TreeSet会根据Compator接口对元素进行排序，放入到二叉树中，物理结构采用了链式存储结构：**

1. 重写比较器可以自定义排序方式（可以使用内部比较器或者外部比较器）
2. 外部比较器的优先级比内部比较器的优先级高
3. 遍历方式，因为是二叉树，所以分为三种方式遍历：
   1. 中序遍历：左 根 右 （TreeSet的遍历方式是该种方式，正好可以按照顺序打印）
   2. 先序遍历：根 左 右
   3. 后序遍历：左 右 根
4. TreeSet内部使用TreeMap实现

   ![image-20220303234749927](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-a5a78039a10f2e0b916304ed995374a4d532c589%2Fimage-20220303234749927.png?alt=media)
5. TreeSet添加元素实际上就是传入到TreeMap

   ![image-20220303234844827](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-3963c321a2c13286697ab7179fe37c39e2c8deaa%2Fimage-20220303234844827.png?alt=media)
