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

时间:2015-08-19 04:01:33

标签: sorting linked-list alphabetical

我环顾四周,但我的研究没有回答如何实际做到这一点或为什么我的工作不起作用。

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; 
}

2 个答案:

答案 0 :(得分:0)

我假设您使用Java。

此外,我假设Event是您自己的类,其中包含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>进行排序。 您无法使用new Comparator<String>对其进行排序,因为您对Event进行了排序,而不是Strings。此外Collections.sort方法不返回任何内容,因此我已对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 }

答案 1 :(得分:-1)

using System.Linq;
...
var sorted = from event in events orderby event.Name descending select event;