2013-03-27 4 views
1

Поскольку я только начинаю с JAVA, мне любопытно, что является лучшим вариантом для реализации сортировки в JAVA (для ArrayLists). Ниже я предоставляю свой PHP-код.Сортировка ArrayList

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)?

+0

Возможный дубликат [Сортировка ArrayList пользовательских объектов по свойству] (http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property) –

+0

Код PHP и код Java являются делая разные вещи. В коде PHP вы получаете массив массивов '$ len', в коде Java вы получаете массив из 2 массивов. – Danny

+0

Кстати, это Java, а не JAVA. Java - это слово, а не аббревиатура. –

ответ

3

Try this Way on you example :

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] 
     */ 

    } 
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); 
     } 
    } 
} 
6
Collections.sort(a); 

Источники: Sorting an ArrayList

+0

О, смешай, я был ниндзя. – Chauer

+0

Должен ли я использовать Comparator для более сложных опций? –

+1

Да, вы должны. –

0

Самый простой способ реализовать сортировку в Java Collections используется метод Collections#sort.

Он использует модифицированный алгоритм merge sort для выполнения задания.

Важно сказать, что он может сортировать объекты класса, который реализует интерфейс Comparable, поэтому вам, возможно, потребуется принять это во внимание. Когда вы реализуете этот интерфейс, вы должны знать, что лучше всего думать о естественном упорядочении рассматриваемого объекта. например Алфавитный порядок строк, если вам нужно отсортировать его в неестественном виде в определенном контексте, не используйте этот интерфейс.

Для этого лучше всего определить Comparator при вызове метода.

0

Способ сделать это - использовать класс Collections и вызвать Collections.sort(java.util.List, java.util.Comparator) в вашем списке. Документировано here. Компаратор - это интерфейс, который вам нужно реализовать, чтобы выполнить пользовательский сортировку. Для того, чтобы реализовать интерфейс Comparator вам необходимо предоставить реализации для

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

используя логику, которую вы уже имеете в своем PHP-файле.

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]) для сравнения. Надеюсь, это поможет кому-то.

Смежные вопросы