如何按字母顺序对 LinkedList 进行排序?

How to sort a LinkedList alphabetically?

我环顾四周,但 none 我的研究回答了实际如何做或我的为什么不起作用。

private LinkedList<Event> events = new LinkedList<Event>();
private LinkedList<Event> tempEvents = new LinkedList<Event>();

public Events()
{
    setup();
}

private void setup()
{   
    events.add(new Event("Breakfast", 10));
    events.add(new Event("Lunch", 15));
    events.add(new Event("Nibbles", 20));
    events.add(new Event("Tea", 25));
    events.add(new Event("Dinner", 30)); 
    events.add(new Event("Snack", 35));
    events.add(new Event("Afters", 40));
}

public Event fromAlpha()
{   
    tempEvents.clear();
    tempEvents = Collections.sort(events, new Comparator<String>());
    return null; 
}
using System.Linq;
...
var sorted = from event in events orderby event.Name descending select event;

我假设您使用 Java。

我还假设 Event 是您自己的 class,它具有 getNamegetNum 方法,例如这个

class Event {

    private final String name;
    private final int num;

    public Event(String name, int num) {
        this.name = name;
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public int getNum() {
        return num;
    }

}

因此您可以将您的 List 排序为匿名 Comparator<Event> class。 你不能用 new Comparator<String> 排序,因为你排序的是 Event,而不是 Strings。另外 Collections.sort 方法没有 return 任何东西,所以我对 events 集合进行了排序。 所以这是工作示例:

class Events {

    private LinkedList<Event> events = new LinkedList<Event>();
    private LinkedList<Event> tempEvents = new LinkedList<Event>();

    public Events() {
        setup();
    }

    private void setup() {   
        events.add(new Event("Breakfast", 10));
        events.add(new Event("Lunch", 15));
        events.add(new Event("Nibbles", 20));
        events.add(new Event("Tea", 25));
        events.add(new Event("Dinner", 30)); 
        events.add(new Event("Snack", 35));
        events.add(new Event("Afters", 40));
    }

    public void fromAlpha() {   
        for(Event e : events) {
            System.out.print("{ " + e.getName() + ", " + e.getNum() + " }");
        }
        System.out.println();
        Collections.sort(events, new Comparator<Event>() {
            public int  compare(Event e1, Event e2) {
                return e1.getName().compareTo(e2.getName());
            }
        });
        for(Event e : events) {
            System.out.print("{ " + e.getName() + ", " + e.getNum() + " }");
        }
        System.out.println();
    }
}

结果如下:

{ Breakfast, 10 }{ Lunch, 15 }{ Nibbles, 20 }{ Tea, 25 }{ Dinner, 30 }{ Snack, 35 }{ Afters, 40 }
{ Afters, 40 }{ Breakfast, 10 }{ Dinner, 30 }{ Lunch, 15 }{ Nibbles, 20 }{ Snack, 35 }{ Tea, 25 }