对作为数字的字符串的ArrayList进行排序

ast*_*ter 6 java arrays sorting arraylist

ArrayList<String>对包含数字的(以递减/递增方式)排序的最快方法是什么,例如:{ "12", "3.5", "188", "33.03" }?请问Collections对此有一个内置的方法?目前我正在将ArrayList内容复制到ArrayList<Double>然后使用Collections.Sort()方法然后将其放回到初始数组中.有更快的方法吗?

tob*_*s_k 9

如果您使用的是Java 8,则可以使用Comparator.comparing(Double::parseDouble)快速创建比较器parseDouble.这应该(见下文)为每个条目调用一次函数,而不是每对一次.

List<String> list = Arrays.asList( "12", "3.5", "188", "33.03" );
list.sort(Comparator.comparing(Double::parseDouble));
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)

输出:

[3.5, 12, 33.03, 188]
Run Code Online (Sandbox Code Playgroud)

更新:好吧,我认为这会为每个元素调用比较器函数一次,就像key在Python中使用函数一样,但是在每次调用函数时使用函数增加计数器的快速测试后,函数会被调用使用旧式的"配对"比较器.还是,有点短......


Ber*_*eri 6

您需要实现自己的比较器,并在列表中使用它.您必须使用BigDecimal,因为您可能会遇到精度损失的问题.你可以使用double,如果你的数字要求小精度.

class MyComparator implements Comparator<String, String> {

    public int compare(String o1, String o2){
        return new BigDecimal(o1).compareTo(new BigDecimal(o2));
    }

}
...
Collections.sort(list, new MyComparator());
Run Code Online (Sandbox Code Playgroud)