我在String的ArrayList中没有这些字符串,但是当我调用Collections.sort(listReference)时,排序结果不正确,为什么10和11(最后2个字符)出现在07,08之前, 09?
12880 20090506054200001
12880 20090506054200002
12880 20090513070200003
12880 20090513070200004
12880 20090520202600005
12880 20090520202600006
12880 20090520232900010
12880 20090520232900011
12880 20090520232900007
12880 20090520232900008
12880 20090520232900009
答案 0 :(得分:9)
它适用于我:
import java.util.*;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("12880 20090506054200001");
list.add("12880 20090506054200002");
list.add("12880 20090513070200003");
list.add("12880 20090513070200004");
list.add("12880 20090520202600005");
list.add("12880 20090520202600006");
list.add("12880 20090520232900010");
list.add("12880 20090520232900011");
list.add("12880 20090520232900007");
list.add("12880 20090520232900008");
list.add("12880 20090520232900009");
Collections.sort(list);
for (String x : list) {
System.out.println(x);
}
}
}
输出:
12880 20090506054200001
12880 20090506054200002
12880 20090513070200003
12880 20090513070200004
12880 20090520202600005
12880 20090520202600006
12880 20090520232900007
12880 20090520232900008
12880 20090520232900009
12880 20090520232900010
12880 20090520232900011
你绝对确定你的7/8/9条目在其他地方没有“奇怪”的东西(例如12880和时间戳之间的空格的不同元素)?
如果没有,你能否制作一个简短但完整的程序来证明这个问题?
答案 1 :(得分:3)
好的,让我们从Collections.sort
的基本前提开始(参见"select" isn't broken)。
你的字符串不应该那样排序,到目前为止,有几个人已经证实他们不这样做。那么是什么原因可能导致你的那样呢?
Comparator
传递给sort()
?您可以发布产生此结果的确切代码吗?
答案 2 :(得分:2)
以10和11结尾的两个可能有空格而不是空格的空格。标签在空格之前排序。
更新:我实际尝试了这个,并且带有选项卡的选项排在订单的顶部,这是有道理的。因此,制表理论并没有真正解释观察到的行为。
答案 3 :(得分:1)
这个单元测试工作正常吗?
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
public class SortTest {
List<String> expectedList = Arrays.asList(
"12880 20090506054200001",
"12880 20090506054200002",
"12880 20090513070200003",
"12880 20090513070200004",
"12880 20090520202600005",
"12880 20090520202600006",
"12880 20090520232900007",
"12880 20090520232900008",
"12880 20090520232900009",
"12880 20090520232900010",
"12880 20090520232900011");
@Test
public void testSort() {
List<String> stringList = new ArrayList(expectedList);
Collections.shuffle(stringList);
// comment following line out, for the rare case that shuffle returns the original list
// assertFalse(stringList.equals(expectedList));
Collections.sort(stringList);
assertTrue(stringList.equals(expectedList));
}
}
答案 4 :(得分:0)
我发现了为什么它的表现如此。
我在执行String.format("%03d", sequence)
之前对集合进行了排序。其中sequence是上面每行的最后3个字符。
总之,