2015-02-03 4 views
0

У меня проблемы с пузырями Calendar по дате, я не уверен, что случилось с моим кодом.Bubblesorting Календари

Во-первых: У меня есть класс (с именем Note), который содержит несколько переменных и методов, одна из этих переменных - Calendar.

Затем у меня есть ArrayList<aboveclass> с именем list, содержащий несколько экземпляров вышеуказанного класса. Я пытаюсь сортировать list по дате каждого экземпляра класса.

Это мой код:

for(int i = 0; i<list.size(); i++){ 
    for(int x=0; x < list.size() - x - 1; x++){ 
     if(list.get(x).date.after(list.get(x+1).date)){ 
      Note temp = list.get(x); 
      list.set(x, list.get(x+1)); 
      list.set(x+1, temp); 
      System.out.println(i + " and " + x + " Switched"); 
     } 
    } 
} 

Ничто не сортируется, хотя, и что System.out.println никогда не будет. Я также попытался переключить .after с .before без каких-либо различий.

Есть ли что-то, что мне не хватает?

Благодаря

+0

Является ли назначение явным образом использовать сортировку пузырьков вручную или вы можете просто использовать 'Comparator'? –

+0

Я могу сортировать их, но я бы хотел. Я никогда не слышал о компараторе, будет ли это проще сортировать? Если вы опубликуете его в ответ, я сделаю это лучше всего – Nathan

ответ

1

Если вам не нужно, чтобы отсортировать список по пузырьковой сортировки, то вы можете использовать java.util.Collection.sort().

Ваш код будет:

Collections.sort(list); 

Вам нужно, однако, чтобы сделать свой класс (Note, если я прав) осуществлять Comparable или создать comparator.

Here вы можете найти несколько примеров.

+0

Это сработало. Мне пришлось смотреть онлайн, как использовать 'Collections.sort', потому что ваш пример не показывает, как изменить то, что вы сортируете, но теперь он работает – Nathan

1

Попробуйте использовать Comparator для вашего ArrayList.

ArrayList<Note> x = new ArrayList<>(); 

x.sort(new Comparator<Note>() { 

    @Override 
    public int compare(Note o1, Note o2) { 
     return o1.date.after(o2.date); 
    } 
}); 

Что-то вдоль этих линий должно работать, я не был уверен, как получить доступ к переменной date.

Edit: выше версия работает только для Java 8.

использовать это для Java 7 и более ранних версий.

ArrayList<Entity> x = new ArrayList<>(); 
Collections.sort(x, new Comparator<Entity>() { 
     @Override 
     public int compare(Entity o1, Entity o2) { 
      return o1.date.after(o2.date); 
     } 
    }); 
+0

'sort' не является доступным методом для ArrayList, я что-то упустил? – Nathan

+0

Это функция Java 8. Я буду редактировать с кодом, который работает на более ранних версиях Java. –

0

Во-первых, решение ваших проблем, в вашем алгоритме у вас есть проблемы во втором цикле for(int x=0; x < list.size() - x - 1; x++), что вы делаете, вы проверяете это x<list.size()- x-1 то, что вы должны сделать, это проверить x<list.size()- i-1 как каждый itteratation внешнего контура уменьшение числа итерации внутренней петли

Вторая вещь, делает то, что предлагают другие люди, и сортировать свой список с помощью Collections.sort() нет смысла изобретать велосипед. В качестве альтернативы вы можете использовать PriorityQueue вместо списка, поэтому ваши данные будут отсортированы всегда.

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