在java中对链表进行排序的方法

时间:2017-09-06 01:46:26

标签: java sorting object linked-list

好吧所以我有这个问题,我的所有信息都被作为对象发送到链接列表,这就是我想要的。链接列表是从另一个类初始化的,另一个类包含LinkedLists的所有方法。有没有一种方法可以根据数字对链表中的对象进行排序?因为每个元素看起来像这样(“800110 Jane Hey你在那里”)。在进入之前,它们被设置为int,string,string:

        //if the command is to RecieveMessage
        SinglyLinkedList <String> Jane= new SinglyLinkedList <String>();
        int Time;
        String Name;
        String Message
        Time=in.nextInt();
        Name=" "+in.next();
        Message=in.nextLine();
        if(Name.equals(" Jane")) {
            //sends message to Janeand increases the number of 
            //unread messages and notifies Jane
        Jane.addLast(Time+Name+Message);

ints不按顺序排列,但我必须订购它们,我不知道如何和集合排序是不允许的。你能帮我吗? .addlast来自标准的链接列表功能。我必须以同样的方式对其他4个用户进行排序,所以如果有一种方法可以通过时间戳对所有用户进行排序,那将是惊人的。我也用这种方法来提取时间:

    public static int extractTime(String Sentence) {
        int length = Sentence.length();
        String result = "";
        for (int i = 0; i < length; i++) {
            Character character = Sentence.charAt(i);
            if (Character.isDigit(character)) {
                result += character;
            }
        }
        return Integer.parseInt(result);
}

String语句是使用for循环的特定节点上的Element:

    for(int i=0; i < Jane.size();i++) {
                UnreadMessage=Jane.first().toString();
                int returnTime= extractTime(UnreadMessage);
                }

请帮忙,这对我很有用。

2 个答案:

答案 0 :(得分:0)

编写一个内部类TimeComp,它实现了比较器&lt;&gt;接口。在那里,我们将指定策略来​​对Person对象进行排序并将其传递给Collections.sort()方法:

class Person{

   int time;
   String name;
   String message;
   //Write get and set methods for all member variables

   class TimeComp implements Comparator<Person>{
       @Override
       public int compare(Person p1, Person p2) {
        if(p1.getTime() < p2.getTime()){
            return 1;
        } else {
            return -1;
        }
    }
   } 
}

List<Person> persons = new LinkedList<Person>();
Collections.sort(persons, TimeComp);

答案 1 :(得分:0)

如果您要一次一个地插入链接列表中的节点,您可以使用自下而上合并排序的变体,它使用一个小的数组(25到32)链接列表来保存排序列表,其中array [i]为null或者是对具有2 ^ i(2到power i)节点的链表的引用。每个节点一次合并到一个阵列中,并且合并操作用于更新阵列。添加最后一个节点后,将合并该数组以形成单个排序列表。 Wiki有一个伪代码示例:

https://en.wikipedia.org/wiki/Merge_sort#Bottom-up_implementation_using_lists

对于这种情况,使用自下而上合并排序将具有时间复杂度O(n log(n)),而对于插入排序方法,则具有O(n ^ 2)。