2017-09-06 111 views
0

好吧,所以我有這個問題,我所有的信息被髮送到鏈接列表作爲對象,這是我想要的。鏈表將從另一個類中初始化,這個其他類包含LinkedLists的所有方法。有沒有一種方法基於數​​字對鏈表中的對象進行排序?因爲每個元素看起來像這樣(「800110簡嘿,你在那裏」)。睡前在,它們被設置爲一個int,字符串,字符串:在java中對鏈接列表進行排序的方法

 //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); 

的整數的arent才能,但我有權命令他們,我不知道如何和集合排序心不是允許的。你可以幫我嗎? .addlast來自標準鏈接列表功能。我必須以相同的方式對其他4個用戶進行排序,所以如果使用時間戳排序所有這些用戶的方法,那將會很棒。 IM也是用這個方法來提取時間:

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

字符串句子使用for循環在特定的節點是元素:

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

請幫助,這將幫助了我這麼多。

+0

排序鏈接列表效率不高。首先按順序維護列表比較好,方法是根據順序選擇插入位置。 – EJP

+0

你有沒有可能像添加消息之前或消息添加之後我可以調用的一個簡短的小方法?因爲時間不會按照正確的順序給出 –

回答

0

編寫一個內部類TimeComp,它實現比較器接口<>。在那裏,我們會指定策略到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); 
+0

我不想比較兩個人之間的時間,1個人(簡)有3個與上面相同格式的對象,但時間戳應該按照時間順序排列 –

0

如果你得到的節點同時插入到鏈表之一,你可以使用自底向上合併排序的一種變體,它使用一個小數組(25到32)鏈表來保存排序列表,其中數組[i]爲空或者是對鏈接列表的引用,其中2^i(2到權力i)節點。每個節點一次合併到一個數組中,並使用合併操作來更新數組。一旦添加了最後一個節點,那麼該數組將被合併以形成單個排序列表。 Wiki有一個僞代碼示例:

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

使用自底向上合併排序爲這種情況下將有時間複雜性爲O(n的log(n)),對爲O(n^2)用於插入排序等方法。