gpt4 book ai didi

java - TreeSet 不按升序排列值

转载 作者:行者123 更新时间:2023-12-05 09:35:38 25 4
gpt4 key购买 nike

我正在尝试创建一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com