2016-11-06 5 views
0
/** 
* Sorts the list of players alphabetically by name. 
* Adapt insertion sort algorithm. 
* You can assume that no two players have the same name. 
* Question T1. Adapting insertion sort for this method 
* could yield efficiencies relative to some other approaches 
* for some important special cases. 
* Do you agree and if so why? Write about 6 to 10 lines. 
*/ 
public void alphabeticSort() { 
    Player temp; 

    for (int i = 0; i < players.size(); i++) { 
     for (int j = players.size() - 1; j > i; j--) 
      if (players.get(i).compareTo(players.get(j)) < 0) { 

       temp = players.get(i); 
       players.set(i, players.get(j)); 
       players.set(j, temp); 
      } 
     } 
    } 

Ich habe versucht, und zu versuchen, aber ich einige Schwierigkeiten habe versucht, zu vergleichen, wie Sie nicht in der Lage sind ArrayList< und > mit einer <Player> Klasse zu verwenden. Wir können auch keine Collection.sort Importe verwenden.Sortierung <Player> Arraylist Namen alphabetisch

Ein Push in die richtige Richtung wäre großartig!

Antwort

2

Wenn Sie mit dem Namen Spieler vergleichen wollen, dann vergleichen Sie die Objekte durch ihre Namen:

if (players.get(i).getName().compareTo(players.get(j).getName()) < 0) { 

Wenn Sie erlaubt sind Collections.sort zu verwenden, dann könnte die Umsetzung viel einfacher und besser sein:

+0

und Sie möchten Kollektionen verwenden. sort() mit einem benutzerdefinierten Comparator anstatt die Sortierung selbst zu codieren ... –

+0

Es scheint, dass er 'Collections.sort' nicht verwenden darf – janos

+0

Danke für die Hilfe janos. Habe es jetzt funktioniert! – copernicon1543

1

Sie können Java 8 Lambda verwenden, um nach Namen in alphabetischer Reihenfolge zu sortieren. Es wird prägnanter sein.

Nehmen Sie den folgenden Code als Beispiel -

public class Test { 
    public static void main(String[] args) { 
     List<Person> list = new ArrayList<>(Arrays.asList(new Person("seal", 25), new Person("tomcat", 32) 
       , new Person("Alpha", 15))); 

     // using Java 8 lambda to sort 
     // you could use this portion inside your alphabeticSort() method. 
     List<Person> newList = list.stream() 
       .sorted(Comparator.comparing(i -> i.getName())) 
       .collect(Collectors.toList()); 

     // for printing 
     newList.stream() 
       .forEach(System.out::println); 

    } 

    static class Person { 
     String name; 
     int age; 

     public Person(String name, int age) { 
      this.name = name; 
      this.age = age; 
     } 

     public String getName() { 
      return name; 
     } 

     public int getAge() { 
      return age; 
     } 
    } 
} 

So Ihre `` Methode so aussehen kann, wird eine sortierte Liste zurück, basierend auf Name-

public List<Person> alphabeticSort(List<Person> list) { 
    return list.stream() 
      .sorted(Comparator.comparing(i -> i.getName())) 
      .collect(Collectors.toList()); 
} 
Verwandte Themen