1

因为我刚开始使用 JAVA,所以我很好奇在 JAVA(对于 ArrayLists)中实现排序的最佳选择是什么。下面我提供我的 PHP 代码。

public int cmp($a, $b) {
    if ( $a[0] < $b[0] ) return 1;
    else if ( $a[0] > $b[0] ) return -1;
    else if ( $a[1] < $b[1] ) return 1;
    else if ( $a[1] > $b[1] ) return -1;
    else return 0;
}

$selected = array();

for ($i=0; $i<$len; $i++) {
    $rank = getRank();
    $cub = getCub_len();
    $selected[] = array($rank,$cub);
}

uasort($selected, 'cmp')

好吧,我用JAVA写了以下代码:

ArrayList<ArrayList<Double>> selected = new ArrayList<ArrayList<Double>>();
ArrayList<Double> rank = new ArrayList<Double>();
ArrayList<Double> cub = new ArrayList<Double>();

for (int i=0; i<len; i++) {
 rank.add(getRank(i));
 cub.add(getCub(i));
}

selected.add(0,rank);
selected.add(1,cub);

如何以selected正确的方式排序(类似于 PHP 函数cmp)?

4

6 回答 6

6
Collections.sort(a);

资料来源:对 ArrayList 进行排序

于 2013-03-27T18:19:44.743 回答
3

在你的例子上试试这种方式:

public static void main(String[] args) throws Exception {
        ArrayList<String[]> listOfStringArrays = new ArrayList<String[]>();
        listOfStringArrays.add(new String[] {"x","y","z"});
        listOfStringArrays.add(new String[] {"a","b","c"});
        listOfStringArrays.add(new String[] {"m","n","o"});
        Collections.sort(listOfStringArrays,new Comparator<String[]>() {
            public int compare(String[] strings, String[] otherStrings) {
                return strings[1].compareTo(otherStrings[1]);
            }
        });
        for (String[] sa : listOfStringArrays) {
            System.out.println(Arrays.toString(sa));
        }
        /* prints out 
          [a, b, c]
          [m, n, o]
          [x, y, z]
        */ 

    }
于 2013-03-27T18:23:39.143 回答
2

试试这个解决方案:

public class SortArrayList{
    public static void main(String args[]){

        List<String> unsortList = new ArrayList<String>();

        unsortList.add("CCC");
        unsortList.add("111");
        unsortList.add("AAA");
        unsortList.add("BBB");
        unsortList.add("ccc");
        unsortList.add("bbb");
        unsortList.add("aaa");
        unsortList.add("333");
        unsortList.add("222");

        //before sort
        System.out.println("ArrayList is unsort");
        for(String temp: unsortList){
            System.out.println(temp);
        }

        //sort the list
        Collections.sort(unsortList);

        //after sorted
        System.out.println("ArrayList is sorted");
        for(String temp: unsortList){
            System.out.println(temp);
        }
    }
}
于 2013-03-27T18:18:27.127 回答
1
for(int j = 0; j < myArray.size(); j++) {
        for (int i = j+1 ; i < myArray.size(); i++){
            if(myArray.get(i)[2].compareTo(myArray.get(j)[2]) < 0){
                String[] temp = myArray.get(j);
                myArray.set(j, myArray.get(i)); 
                myArray.set(i, temp); 
            }
        }
    }

我正在使用第三个字段(myArray.get(j)[2])进行比较。我希望这会对某人有所帮助。

于 2013-12-31T14:45:40.313 回答
0

在 Java Collections 中实现排序的最简单方法是使用Collections#sort方法。

它使用修改后的合并排序算法来完成这项工作。

重要的是,它只能对实现Comparable接口的类的对象进行排序,因此您可能需要考虑到这一点。当您实现此接口时,您应该知道最好考虑相关对象的自然顺序。例如字符串的字母顺序,如果您需要在特定上下文中以不自然的方式对其进行排序,请不要使用此接口。

为此,最好在调用该方法时定义一个Comparator 。

于 2013-03-27T18:23:57.900 回答
0

这样做的方法是使用 Collections 类,并调用Collections.sort(java.util.List, java.util.Comparator)您的列表。它记录在这里。这里的 Comparator 是一个接口,您需要实现它才能进行自定义排序。要实现Comparator接口,您需要提供实现

int compare(T o1,T o2)boolean equals(Object obj)

使用您在 PHP 文件中已有的逻辑。

于 2013-03-27T18:23:58.043 回答