Java 如何对LinkedList进行排序<;字符串>;?

Java 如何对LinkedList进行排序<;字符串>;?,java,sorting,linked-list,comparable,Java,Sorting,Linked List,Comparable,我需要根据字符串的长度对LinkedList的字符串进行排序,但希望保持相同长度字符串的顺序(不按字典顺序排序) 样本输入: this is just a test 样本输出: a is this just test 我试图用Comparable和compareTo方法来实现这一点,但我没有得到正确的输出(我的仍然按字典顺序排序) 如何纠正此问题?很遗憾,字符串没有表示它们在链接列表中所处位置的属性。因此,您需要创建一个自定义数据对象来跟踪该信息。或者为链表编写自己的自定义排序方法,并调用它

我需要根据字符串的长度对LinkedList的字符串进行排序,但希望保持相同长度字符串的顺序(不按字典顺序排序)

样本输入:

this
is
just
a
test
样本输出:

a
is
this
just
test
我试图用
Comparable
compareTo
方法来实现这一点,但我没有得到正确的输出(我的仍然按字典顺序排序)


如何纠正此问题?

很遗憾,字符串没有表示它们在链接列表中所处位置的属性。因此,您需要创建一个自定义数据对象来跟踪该信息。或者为链表编写自己的自定义排序方法,并调用它而不是Collections.sort()。

使用
Collections.sort(list,comparator)
重载。您需要的是
比较器
而不是
比较器
。请注意,Collections.sort的javadoc保证了稳定的排序(根据您的比较器,保持相等字符串、相等平均值的顺序)。

您应该创建一个比较器:

public class Q3_sorting implements Comparator<String> {
public int compare(String a, String b) {
 return a.length() - b.length();
}
请注意,您要做的是对列表中的字符串进行排序。通过实现列表的比较器(或者类似的,因为它在这里的作用是相同的),您告诉JVM的是您想要比较不同的列表


您也可以通过在类中实现可比较的排序来实现您的目标,但是您不能,只要字符串是final,就不能扩展。因此,除了实现一个比较器之外,没有其他方法了,比较器也更简单:)

您正在对字符串进行排序,而不是字符串列表。为此,您需要定义一个
比较器
,以按长度比较两个字符串,如下所示:

public class ByLength implements Comparator<String> {
  @Override
  public int compare(String a, String b) {
    return a.length() - b.length();
  }
}

还要注意的是,对
链接列表进行排序是非常低效的,您应该使用
数组列表

任何合理的
集合实现。排序
将在排序之前将数据复制到数组,然后再复制回数组。但是,
LinkedList
通常效率低下,应该避免使用。
Comparator
也可以用于排序
列表
实现,例如用于
树集
树映射
。是的。它还可以通过arrays实用程序类在自定义用途中对数组进行排序。
a
is
just
test
this
public class Q3_sorting implements Comparator<String> {
public int compare(String a, String b) {
 return a.length() - b.length();
}
Collections.sort(list, new Q3_sorting());
public class ByLength implements Comparator<String> {
  @Override
  public int compare(String a, String b) {
    return a.length() - b.length();
  }
}
Collections.sort(sort.fileList, new ByLength());