2013-11-02 5 views
0
for (int i = 0; i <array.size(); i++){ 
     int min = i; 
     for (int j = i + 1; j < array.size(); j++){ 
      if (array.get(j).getnumber() > array.get(min).getnumber()){ 
       min = j; 
      } 
     } 

     object tmp = array.get(i); 
     array.set(i, array.get(min)); 
     array.set(min,tmp); 
    } 

Я думаю, что, возможно, я сделал ошибку где-то, но я не знаю, где ...Как отменить сортировку arraylist в java? (Только с помощью выбора рода)

+2

Используйте 'Collections.sort (список, компаратор)' –

+0

Извините, но не могли бы вы сказать мне метод с помощью выбора рода для этой сортировки в обратном порядке ... – user2947725

+0

Поделиться в ArrayList определение, пожалуйста. –

ответ

1

Вы не должны осуществлять сортировку, как таким образом, JAVA предоставить нам Сопоставимые интерфейс, чтобы сделать это более эффективный

public class Item implements Comparable<Item>{ 

private int number; 

public Item(int number) { 
    this.number = number; 
} 

public int getNumber() { 
    return number; 
} 


public void setNumber(int number) { 
    this.number = number; 
} 


public int compareTo(Item o) { 
    //sort increasing 
    //return this.getNumber() - o.getNumber(); 

    //sort decreasing 
    return o.getNumber() - this.number; 
    } 
} 

Главный класс:

import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

    public class Main { 

     public static void main(String[] args) { 

      List<Item> list = Arrays.asList(new Item(3), new Item(6), new Item(-4)); 

      Collections.sort(list); 

      for (Item item : list) { 
       System.out.println(item.getNumber()); 
      } 
     } 

    } 
+0

tbh Я еще не изучил коллекции ... но THX для ответа ур. извините – user2947725

+0

@ user2947725: вы еще не узнали коллекции? Как вы думаете, ArrayList, если это не коллекция? Что мешает вам учиться самостоятельно? Если вы только когда-либо используете вещи, которые вы узнали в школе, вы не получите очень далеко. Документация существует по уважительной причине. –

+0

yeh Я знаю, я не очень умный .. :(, sry для траты времени ur – user2947725

0

, безусловно, самый простой способ сортировки в обратном порядке некоторые список c является Collections.sort(c, c.reverseOrder()). Однако для элементов списка необходимо реализовать интерфейс Comparable. В качестве альтернативы вы можете заменить c.reverseOrder() на отдельный компаратор вместо того, чтобы реализовать Comparable.

+3

И если у вас уже есть компаратор, но хотите, чтобы он сортировался в обратном порядке, используйте 'Collections.sort (list, Collections.reverseOrder (компаратор)) ' –

0

Простой способ (и рекомендуемый способ) из сортировка ArrayLists использует сопоставимый интерфейс или объект Comparator. Это очень легко понять, как только вы сделали это много раз, но немного сбиваете с толку, когда вы впервые начинаете. Вот пример объекта компаратора (непроверенного, но я думаю, что он должен работать - если объекты в массиве имеет типа «MyCustomObject»):

ArrayList<Integer> myArrayList = new ArrayList<MyCustomObject>(); 
myArrayList.add(new MyCustomObject(2)); 
myarrayList.add(new MyCustomObject(8)); 
myArrayList.add(new MyCustomObject(3)); 

// Here is the actual sorting: 
Collections.sort(myArrayList, new Comparator<MyCustomObject>(){ 
    public int compare(MyCustomObject o1, MyCustomObject o2){ 
    if (o1.getNumber() > o2.getNumber()) return 1; 
     if (o1.getNumber() < o2.getNumber()) return -1; 
     return 0; 
    } 
} 

Если вы хотите изменить критерии сортировки, просто измените реализацию compare() внутри там - как реверсирование операторов if или сортировку в другом поле в ваших объектах. Если вы просто обратный, вы должны использовать reverseOrder(), как упоминалось другими в этом потоке.

0

Попробуйте это: Не тестировалось

int currentMax; 
int currentMaxIndex; 

for (int i = 0; i <array.size(); i++){ 

    currentMax = array.get(i).getNumber(); 
    currentMaxIndex = i; 

    for (int j = i + 1; j < array.size(); j++){ 
     if (array.get(j).getnumber() < array.get(i).getnumber()){ 
      currentMax = array.get(j).getNumber(); 
      currentMaxIndex = j; 
     } 
    } 

    // swap only if neccessary 
    if (currentMax > array.get(i).getNumber()) { 
     object tmp = array.get(i); 
     array.set(i, array.get(currentMaxIndex)); 
     array.set(currentMaxIndex,tmp); 
     // not sure how your object work, so not sure how this swap is working 
     // so i just left it. 
    } 

}