TreeSet 預設按自然順序(字符串為字典序)排序。若需按長度排序,必須提供 Comparator。
public class ComparatorByLength implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
int lenDiff = s1.length() - s2.length();
// 長度相同時按字典序,保證 equals 一致性
return (lenDiff == 0) ? s1.compareTo(s2) : lenDiff;
}
}
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<String> ts = new TreeSet<>(new ComparatorByLength());
ts.add("aaaaaaaa");
ts.add("zz");
ts.add("nbaq");
ts.add("cba");
ts.add("abc");
ts.forEach(System.out::println);
}
}
zz cba abc nbaq aaaaaaaa
長度從小到大;同長度(cba、abc)按字典序排列。
TreeSet 會誤判為重複元素導致數據丟失。Comparator.comparingInt(String::length).thenComparing(Function.identity())。