【问题标题】:How to sort a LinkedList alphabetically?如何按字母顺序对 LinkedList 进行排序?
【发布时间】:2015-08-19 04:01:32
【问题描述】:

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

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

【问题讨论】:

  • 您需要提供Comparator&lt;Event&gt; 才能对List&lt;Event&gt; 进行排序。

标签: sorting linked-list alphabetical


【解决方案1】:

我假设你使用 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;
    }

}

因此,您可以使用匿名 Comparator&lt;Event&gt; 类对您的 List 进行排序。 您无法使用new Comparator&lt;String&gt; 对其进行排序,因为您排序的是Events,而不是Stringss。 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 }

【讨论】:

    【解决方案2】:
    using System.Linq;
    ...
    var sorted = from event in events orderby event.Name descending select event;
    

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多