Java:对String数组进行排序,其字符串表示int

Sef*_*an2 13 java sorting

我有String[]阵列喜欢

{"3","2","4","10","11","6","5","8","9","7"}
Run Code Online (Sandbox Code Playgroud)

我想按数字顺序对其进行排序,而不是按字母顺序排序.

如果我使用

Arrays.sort(myarray);
Run Code Online (Sandbox Code Playgroud)

我知道了

{"10","11","2","3","4","5","6","7","8","9"}
Run Code Online (Sandbox Code Playgroud)

代替

{"2","3","4","5","6","7","8","9","10","11"}
Run Code Online (Sandbox Code Playgroud)

vik*_*eve 21

尝试自定义Comparator,如下所示:

    Arrays.sort(myarray, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
        }
    });
Run Code Online (Sandbox Code Playgroud)

希望你喜欢!

  • 我喜欢这个解决方案的简洁性,但是与预转换数组相比,有一点性能损失,因为我们每次比较时都会将`String`转换为`int`:因为比较的数量总是大于列表的大小,我们正在进行比必要更多的转换.我不知道性能是否是OP的问题,但值得铭记. (2认同)

dev*_*obf 5

我认为迄今为止将Strings转换为s的最简单和最有效的方法int

int[] myIntArray = new int[myarray.length];

for (int i = 0; i < myarray.length; i++) {
    myIntArray[i] = Integer.parseInt(myarray[i]);
}
Run Code Online (Sandbox Code Playgroud)

然后对整数数组进行排序。如果您确实需要,您可以随时转换回来:

for (int i = 0; i < myIntArray.length; i++) {
    myarray[i] = "" + myIntArray[i];
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用Comparator接口来准确地规定如何比较元素,但这可能相当于将每个String值转换为int无论如何 - 使上述方法更加有效。

  • 只是一个建议:也许 `Integer.toString(myIntArray[i])` 会比 `"" + myIntArray[i]` 更明确地说明类型转换 (3认同)