java - TreeSet 不按升序排列值

标签 java

我正在尝试创建一个 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 之前相同。

你有两条路线可以解决这个问题:

  1. 不要将字符串放在那里,而是将一些其他实现 Comparable 并正确执行的对象放在那里。也许是 class Thingie {String name; int idx;} .

  2. 传递 Comparator作为 TreeSet 类的第一个也是唯一一个参数。编写确定 @Test10 的代码在 @Test2 之前.然后,TreeSet 使用此比较器来确定排序,而不使用内置于字符串中的比较器。

关于java - TreeSet 不按升序排列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65703409/

相关文章:

java - 有什么方法可以知道在 Jersey @__Param fromString 处理程序中正在解析哪个参数?

java - 使用循环输出 ASCII 菱形

java - Ubuntu 12.04 和 Netbeans 上的 RXTX

java - 以 θ 表示的复杂性

java - 如何从 java 包运行 Applescript

java - 不幸的是<项目名称>已停止消息

Java MySQL 空结果集

java - 模糊逻辑的具体例子

java - 如何在 Maven pom 文件中定义源文件夹顺序?

java - 当我使用@Transactional时hibernateFilter。是必然的吗?