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])比較のために 3 番目のフィールドを使用しています。これが誰かを助けることを願っています。

于 2013-12-31T14:45:40.313 に答える
0

Java コレクションでソートを実装する最も簡単な方法は、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 に答える