排序自定义链表在Java中



我已经创建了自己的链表实现,它存储了一个姓和一个名。现在我正试着按姓氏的字母顺序对名字列表进行排序,但我在这方面遇到了麻烦。我读过关于可能使用集合的文章。排序,但我不确定如何修改我的类,所以我可以使用集合。排序或者这是否是一个好方法。下面是我到目前为止所做的。如果有人能帮助我这将是非常感激。我想要完成的是,当我打印它时,它会打印乔·罗杰斯,比尔·托马斯,格雷格·韦斯特,这意味着它是按姓氏排序的。

编辑:谢谢大家的快速回复,我真的很感激。
class Test {
public static void main(String[] args)
{
    LinkedList l = new LinkedList();
    l.insert("Greg", "West");
    l.insert("Joe", "Rogers");
    l.insert("Bill", "Thomas");
    l.print();
    Collections.sort(l) // I am unable to get this to work

}
public static class myLink {
public myLink next;
public String first;
public String last;
public myLink(String first, String last)
{
    this.first = first;
    this.last = last;
}
public void print()
{
    System.out.printf("%s %sn",first,last);
}
}
public static class LinkedList {
private myLink linkedList;
public LinkedList() 
{
    linkedList = null;
}
public void insert(String first, String last)
{
    myLink li = new myLink(first, last);
    li.next = linkedList;
    linkedList = li;
}
public void print()
{
    myLink c = linkedList;
    while(c != null)
    {
        c.print();
        c = c.next;
    }
}
}
}

LinkedList将为你工作。您只需要Person类和自定义的Comparator,如下例所示。

public class Person {
    String first;
    String last;
    public Person(String f, String l) {
        this.first = f;
        this.last = l;
    }
}
public class LinkExample {
    public static void main(String[] args) {
        LinkedList<Person> pList = new LinkedList<Person>();
        pList.add(new Person("AFirst","ZLast"));
        pList.add(new Person("BFirst","BLast"));
        Collections.sort(pList, new Comparator<Person>() { 
           public int compare(Person p1, Person p2) {
            return p1.last.compareTo(p2.last);
           }
        });
        System.out.println(pList.pollFirst().last);
        System.out.println(pList.pollFirst().last);
    }
}

我已经尝试使用Java的链表,但添加方法只允许您使用单个字符串

不,你也可以添加你的类。简单地实现了Comparable接口,把你的逻辑放在覆盖的compareTo()方法。

使用Collections.sort()对列表进行排序

示例代码:public static void main(String[] args) {LinkedList 1 = new LinkedList();

    l.add(new MyLink("Greg", "West"));
    l.add(new MyLink("Joe", "Rogers"));
    l.add(new MyLink("Bill", "Thomas"));
    Collections.sort(l);
    for(MyLink link:l){
        link.print();
    }
}
public static class MyLink implements Comparable<MyLink>{
    public MyLink next;
    public String first;
    public String last;
    public MyLink(String first, String last) {
        this.first = first;
        this.last = last;
    }
    public void print() {
        System.out.printf("%s %sn", first, last);
    }
    @Override
    public int compareTo(MyLink o) {
        int result = this.last.compareTo(o.last);
        if(result==0){
            result = this.first.compareTo(o.first);
        }
        return result;
    }
}
输出:

Joe Rogers
Bill Thomas
Greg West

无需实现Comparable接口即可实现。

直接使用Collections.sort(List,Comparator)方法

示例代码:

Collections.sort(l,new Comparator<MyLink>(){
    @Override
    public int compare(MyLink o1, MyLink o2) {
        int result = o1.last.compareTo(o2.last);
        if(result==0){
            result=o1.first.compareTo(o2.first);
        }
        return result;
    }
});

注意:

  • 永远不要在你的类中使用build in class的名字,否则可能会造成混淆
  • 尊重Java命名约定。

我将创建一个Person bean对象:

  • 包含名字和姓氏,
  • 实现了与姓氏
  • 类似的排序

那么你所要做的就是把你所有的Person对象放在一个ArrayList中,并使用Collections.sort()来得到它们的正确顺序

你可以让你的类myLink实现Comparable接口。然后根据您的需求覆盖compareTo()方法。然后你可以使用Collections.sort(collection);

排序

更多信息请阅读文档

还要注意Java命名约定。myLink应该是MyLink,依此类推…

这将排序myLink的集合。但是如果你想排序你的自定义LinkedList类,我建议在class LinkedList中创建一个方法sort()。在此方法中,创建所有myLink实例的列表(您有对头部的引用)。然后在这里调用Collections.sort()并返回排序集合。

相关内容

  • 没有找到相关文章

最新更新