java - 如何对 LinkedList<String> 进行排序?

标签 java sorting linked-list comparable

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

示例输入:

this
is
just
a
test

示例输出:

a
is
this
just
test

我正在尝试使用 Comparable<LinkedList<String>> 来做到这一点和一个 compareTo方法,但我没有得到正确的输出(我的仍然按字典顺序排序)

public class Q3_sorting implements Comparable<LinkedList<String>> {
    Scanner keyboardScanner = null;
    LinkedList<String> fileList = new LinkedList<String>();

//[...] 这里有一些代码

public int compareTo(LinkedList<String> o) {
        // TODO Auto-generated method stub
        o = fileList;

        for (int i = 0; i < fileList.size() -1; i++) {
            if (fileList.get(i).length() == o.get(i+1).length()) {
                return 0;
            }
            if (fileList.get(i).length() > o.get(i+1).length()) {
                return -1;
            }
            if (fileList.get(i).length() < o.get(i+1).length()) {
                return 1;
            }

        }

然后我使用
Q3_sorting sort = new Q3_sorting(args);
Collections.sort(sort.fileList); 在我的主要方法中。然后我将列表打印出来...

但我得到这个作为输出:

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

请注意,您要做的是对列表中的字符串进行排序。通过实现 List 的比较器(或类似的,因为它在这里的目的相同),您告诉 JVM 的是您想要比较不同的 List。

您也可以通过在要排序的类中实现 Comparable 来实现您的目标,但只要 String 是最终的,您就不能实现,因此您不能扩展。因此,除了实现比较器之外别无他法,这也更简单:)

关于java - 如何对 LinkedList<String> 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12642720/

相关文章:

java - Android 中的 raw 文件夹

java - 如何按每个列表的第一个元素对 List<List<String>> 进行排序?

c - 我正在为纸牌游戏编写代码。在我的交易卡功能中,程序卡住了,我无法确定原因

创建链表+添加新节点+打印列表,但无法弄清楚为什么它不起作用

c - 在 C 中为目录下排序

java - 将字符串 ArrayList 放入 SQLite 数据库

java - 使用 foreach 循环时没有 ConcurrentModificationException

java - 此处理程序类应该是静态的,否则可能会发生泄漏 : final Handler

c++ - 使用元素键迭代 STL 容器

用于字节数组的 Java 比较器(字典顺序)