在链表中排序值

时间:2014-04-27 14:56:08

标签: java linked-list

我在链表中​​的值为

  

TY12354d,sfasdf,asfasf,2.35123412E8

     

TY12354dsaf,asdffasd,asfasfafsd,12344.0

     

Pranish,pranishfilan,毒蛇,1234

     

ZXS,ASDF,ASFD,1234

     

UV,VR,VA,1234

     

万维网,DSF,ASDF,123

     

dsfgsdf,SD,SD,235

这些值由包含特定数据的逗号分隔。第一个是TY12354d,TY12345saf,Pranish等是id,第二个,即sfasdf,asdffasd,pranishfilan等都是名称。这些值在jtextfield中查看。我想让用户在点击&#34时根据id对数据进行排序;按ID排序"按钮,点击时按名称"按名称排序"按钮等。

2 个答案:

答案 0 :(得分:2)

您必须编写自己的比较器,或重写结构。使用比较器,您只需使用Collections.sort对列表进行排序。

在stackoverflow上实现比较器有很多线程,比如this one。它实际上相当简单。

对链表进行排序效率不高,所以如果你不使用Collections.sort,它使用中间数组进行排序,我建议你将数据结构改为例如数组或ArrayList。或者,甚至更好:创建一个Class来表示您的数据并为该类定义比较器。

以下是比较器的示例:

import java.util.*;

class Test {

    static class IDComparator implements Comparator<String> {
        @Override
        public int compare(String a, String b) {
            return a.split(",")[0].compareToIgnoreCase(b.split(",")[0]);
        }
    }


    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<String>();
        ll.add("TY12354d,sfasdf,asfasf,2.35123412E8");
        ll.add("TY12354dsaf,asdffasd,asfasfafsd,12344.0");
        ll.add("Pranish,pranishfilan,viper,1234");

        System.out.println("Before sorting on ID:\n");
        for (String s : ll) {
            System.out.println(s);
        }
        Collections.sort(ll,new IDComparator());
        System.out.println("\nAfter sorting on ID:\n");
        for (String s : ll) {
            System.out.println(s);
        }        
    }
}

输出:

Before sorting on ID:

TY12354d,sfasdf,asfasf,2.35123412E8
TY12354dsaf,asdffasd,asfasfafsd,12344.0
Pranish,pranishfilan,viper,1234

After sorting on ID:

Pranish,pranishfilan,viper,1234
TY12354d,sfasdf,asfasf,2.35123412E8
TY12354dsaf,asdffasd,asfasfafsd,12344.0

这不是我写过的最漂亮的代码。我特别不喜欢比较器本身,带有硬编码索引。但是,它会让您了解如何使用自定义比较器。

答案 1 :(得分:1)

请尝试按ID进行排序。

LinkedList<String> list = new LinkedList<String>();

list.add("TY12354d,sfasdf,asfasf,2.35123412E8");
list.add("TY12354dsaf,asdffasd,asfasfafsd,12344.0");
list.add("Pranish,pranishfilan,viper,1234");
list.add("zxs,asdf,asfd,1234");
list.add("uv,vr,va,1234");
list.add("www,dsf,ASDF,123");
list.add("dsfgsdf,sd,sd,235");

Collections.sort(list, new Comparator<String>() {
    public int compare(String a, String b) {
        System.out.println(a+" --> "+b);
        return a.substring(0, a.indexOf(',')).compareTo(b.substring(0, b.indexOf(',')));
    }
});

也为名称使用相同的概念。

输出:

Pranish,pranishfilan,viper,1234
TY12354d,sfasdf,asfasf,2.35123412E8
TY12354dsaf,asdffasd,asfasfafsd,12344.0
dsfgsdf,sd,sd,235
uv,vr,va,1234
www,dsf,ASDF,123
zxs,asdf,asfd,1234

- 编辑 -

根据OP在Car对象

上比较的最后评论
class Car {
    String id;
    String name;

    public Car(String id, String name) {
        this.id = id;
        this.name = name;
    }
    // getter & setter
}

LinkedList<Car> list = new LinkedList<Car>();

list.add(new Car("TY12354d", "sfasdf"));
list.add(new Car("TY12354dsaf", "asdffasd"));
list.add(new Car("Pranish", "pranishfilan"));
list.add(new Car("zxs", "asdf"));
list.add(new Car("uv", "vr"));
list.add(new Car("www", "dsf"));
list.add(new Car("dsfgsdf", "sd"));

Collections.sort(list, new Comparator<Car>() {
    public int compare(Car c1, Car c2) {
        return c1.id.compareTo(c2.id);
    }
});