如何用java中的对象对链表进行排序

问题描述:

我用Java中的对象创建了一个链表(通用容器)。我需要重新编写我的插入方法以使列表按键按字母顺序排序。这是到目前为止我的代码:如何用java中的对象对链表进行排序

集装箱:

class Sellbeholder<N extends Comparable<N>, V> implements INF1010samling<N,V> { 

private Keeper første; 
private int ant = 0; 

private class Keeper { 
    Keeper neste; 
    N n; 
    V v; 

    Keeper(N n,V v) { 
     this.n = n; 
     this.v = v; 
    } 
} 

这是我的插入方法(我需要重写):

public void PutIn(N n, V v) { 
    Keeper kep = new Keeper(n,v); 
    kep.neste = første; 
    første = kep; 
    ant++; 

这是与人的对象,这是我”中号将在容器(链表):

class Person { 

    String name; 

    Person(String n) { 
     this.name = n; 
    } 
} 

而且我这是怎么创造的人,把他们在容器:

Sellbeholder <String,Person> b1 = new Sellbeholder <String,Person>(); 
Person a = new Person("William"); 
b1.PutIn("William",a); 

任何帮助,我将不胜感激。我知道我需要使用CompareTo-metohod来检查放置对象的位置,但我不确定应如何设置链接列表的结构。我已经开始在这:

for(Keeper nn = første; nn!= null; nn = nn.neste) { 

    if(nn.n.compareTo(kep.n) > 0) { 
     //Do something here 
+0

为什么你不能使用TreeSet而不是原因? http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html – anoopelias 2013-02-27 15:22:58

+0

如果你需要一个链表,你可以使用** java.util.LinkedList **,如果你需要一个Map按键排序可以使用** java.util.TreeMap **。 我认为TreeMap可以做你正在寻找的东西。 – 2013-02-27 15:29:31

+0

@anoopelias可能他必须亲自实施它,例如像作业一样。 – gaborsch 2013-02-27 15:31:00

迭代,直到得到适当的地方:

public void PutIn(N n, V v) { 
    Keeper kep = new Keeper(n,v); 
    // you will insert between previous and current 
    Keeper previous = null; 
    Keeper current = første; 

    // loop until you get the right place   
    while (current != null && ((current.n).compareTo(n) > 0)) { 
     previous = current; 
     current = current.neste; 
    } 

    // insert your stuff there (if there were no previous, then this is the first one) 
    if (previous == null) { 
     første = kep; 
    } else { 
     previous.neste = kep; 
    } 

    // Set the next Keeper 
    kep.neste = current; 

    ant++; 
} 

这将让你的有序列表。

+0

这正是我所期待的。 非常感谢! – Jectson 2013-02-27 15:51:10

+0

@SondreEftedal也许值得赞扬,:) – gaborsch 2013-02-27 16:15:51