Collections.sort 未按预期对 ArrayList 进行排序 [beanshell,Java,JMeter]

Collections.sort not sorting ArrayList as expected [beanshell, Java, JMeter]

我在 Beanshell 处理器 (JMeter) 中使用了一些 Java 代码。此 java 代码简单有效。它应该简单地对数字数组列表进行排序,但它给出了奇怪的行为:

// Input data is like below:
   student_id_RegEx_1=13
   student_id_RegEx_11=4
   student_id_RegEx_12=23
   student_id_RegEx_13=24

// CREATE ARRAY LIST AND STORE ELEMENTS IN IT
ArrayList strList = new ArrayList();
for (int i=0;i<25; i++){
strList.add(vars.get("student_id_RegEx_" + String.valueOf(i+1)));
}

// Print the ArrayList created by above method [output is]
vars.putObject("ArrayListBeforeSorting",strList);
ArrayListBeforeSorting=[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 4, 23, 24, 25, 26, 27, 28, 29, 5, 6, 7, 8, 9, 10, 11]


// Sort the ArrayList 
Collections.sort(strList);

//Print the sorted ArrayList [below is output]
vars.putObject("ArrayListAfterSorting",strList);
ArrayListAfterSorting=[10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 4, 5, 6, 7, 8, 9]

观察 sortedArrayList 末尾的 28, 29, 4, 5, 6, 7, 8, 9, 10, 11。我期待 4、5、6、7、8、9、10、11、12 等等 我无法理解这种奇怪行为背后的原因。可能是因为 'array input data' 有问题吗? Collections.sort 似乎工作正常;当我自己创建一个示例数组列表时。对此行为和解决方案的任何评论将不胜感激。谢谢

不保存字符串类型的值,而是将它们保存为数字:

String strValue = vars.get("student_id_RegEx_" + String.valueOf(i+1));
strList.add(Integer.parseInt(strValue));

按字符串排序通过逐个比较每个字符来工作,例如:

2 4 5
| | | |
2 2 3 3

2 = 2
4 > 2 - therefore, "245" is "bigger" than "2233"