我正在尝试创建一个 TreeSet 来对插入的字符串进行升序排序。我正在使用以下代码在 TreeSet 中输入值。
TreeSet<String> ts = new TreeSet<String>();
ts.add("@Test0");
ts.add("@Test1");
ts.add("@Test2");
ts.add("@Test3");
ts.add("@Test10");
ts.add("@Test4");
System.out.println("Tree set :: "+ts);
输出:
Tree set :: [@Test0, @Test1, @Test10, @Test2, @Test3, @Test4]
最佳答案
您已经使用了无参数 TreeSet 构造函数。这意味着 TreeSet 将根据自然顺序对其元素进行排序。这是对象比较自身的方式:这意味着你添加的东西必须是实现了 Comparable<Self>
的类型。 . String 这样做: String 类被定义为实现 Comparable<String>
.但是,字符串比较自身的方式是按字典顺序进行的。 10 出现在 2 之前,原因与 aa 出现在 b 之前相同。
你有两条路线可以解决这个问题:
不要将字符串放在那里,而是将一些其他实现 Comparable 并正确执行的对象放在那里。也许是
class Thingie {String name; int idx;}
.传递
Comparator
作为 TreeSet 类的第一个也是唯一一个参数。编写确定@Test10
的代码在@Test2
之前.然后,TreeSet 使用此比较器来确定排序,而不使用内置于字符串中的比较器。
关于java - TreeSet 不按升序排列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65703409/