跳转至

Set 如何实现排序

一、HashSet

无序。

二、LinkedHashSet

按插入顺序排序(内部是 LinkedHashMap)。

Set<String> set = new LinkedHashSet<>();
set.add("b");
set.add("a");
// 遍历:b, a

三、TreeSet

按元素自然顺序或 Comparator 排序。

Set<String> set = new TreeSet<>();
set.add("b");
set.add("a");
// 遍历:a, b

自定义排序

Set<User> set = new TreeSet<>(Comparator.comparing(User::getAge));

四、对比

顺序
HashSet 无序
LinkedHashSet 插入顺序
TreeSet 排序顺序

五、怎么选

  • 只去重:HashSet。
  • 要插入顺序:LinkedHashSet。
  • 要排序:TreeSet。

六、底层

  • HashSet:HashMap。
  • LinkedHashSet:LinkedHashMap。
  • TreeSet:TreeMap(红黑树)。

一句话

TreeSet 排序,LinkedHashSet 保序,HashSet 快。