好吧所以我有这个问题,我的所有信息都被作为对象发送到链接列表,这就是我想要的。链接列表是从另一个类初始化的,另一个类包含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);
}
请帮忙,这对我很有用。
答案 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)。