2012-04-11 124 views
1

所以我有這樣的ArrayList:Java如何ArrayList <String>排序/按索引排序?

list.get(0) == "love" 
list.get(1) == "foo" 
list.get(2) == "make" 
list.get(3) == "links" 

我要的是:

list.get(0) == "links" 
list.get(1) == "make" 
list.get(2) == "foo" 
list.get(3) == "love" 

我都試過,但不工作:

public static void orderDescending(final ArrayList<String> list){ 
    Collections.sort(list, new Comparator<String>() { 
     public int compare(String s1, String s2) { 
      Integer i1 = list.indexOf(s1); 
      Integer i2 = list.indexOf(s2); 
      return i1.compareTo(i2); 
     } 
    }); 
} 

Thanx提前。

+2

你在這裏顯示的是不排序,但正在倒轉...你想扭轉列表嗎? – Hristo 2012-04-11 06:35:32

+0

是的,我想扭轉它。抱歉。 – djcharon 2012-04-11 06:37:03

+2

'Collections.reverse(list);' – Richante 2012-04-11 06:37:50

回答

7

你可以這樣做:

Collections.reverse(list); 
0

這裏有一個簡單的列表逆轉算法。如果您不關心算法,請使用Collections.reverse()

public static void reverse(List<String> list) { 

    if (list == null) { 
     return; 
    } 

    int size = list.size(); 
    int mid = list.size()/2; 

    ListIterator<String> fwd = list.listIterator(); 
    ListIterator<String> rev = list.listIterator(size); 

    for (int i = 0; i < mid; i++) { 
     String tmp = fwd.next(); 
     fwd.set(rev.previous()); 
     rev.set(tmp); 
    } 
} 
0

你做了一個小錯誤,否則你幾乎已經做到了。

你應該嘗試 「返回I2 .compareTo(I1);」

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 

public class Reverse { 

    public static void main(String[] args) { 
     ArrayList<String> list = new ArrayList<String>(); 
     list.add("love"); 
     list.add("foo"); 
     list.add("make"); 
     list.add("links"); 
     System.out.println(list); 
     orderDescending(list); 
     System.out.println(list); 
    } 

    public static void orderDescending(final ArrayList<String> list) { 
     Collections.sort(list, new Comparator<String>() { 
      public int compare(String s1, String s2) { 
       Integer i1 = list.indexOf(s1); 
       Integer i2 = list.indexOf(s2); 
       // return i1.compareTo(i2); 
       return i2.compareTo(i1); 
      } 
     }); 
    } 
}