Java 链接列表的排序错误

Java 链接列表的排序错误,java,linked-list,Java,Linked List,我有一个对象的链接列表(书籍,其中的字段是标题、作者和其他)。为什么这种按标题排序的实现会给出错误的结果 import java.util.*; public class sort { public static void main(String[] args) { LinkedList<Book> l = new LinkedList<>(); l.add(new Book("Vargas Fred", "Il mors

我有一个对象的链接列表(书籍,其中的字段是标题、作者和其他)。为什么这种按标题排序的实现会给出错误的结果

import java.util.*;

public class sort
{
    public static void main(String[] args)
    {
        LinkedList<Book> l = new LinkedList<>();
        l.add(new Book("Vargas Fred", "Il morso della reclusa"));
        l.add(new Book("Postorino Rossella", "Le assaggiatrici"));
        l.add(new Book("Bythell Shaun", "Una vita da libraio"));
        l.add(new Book("Simenon Georges", "Il fondo della bottiglia"));



        Collections.sort(l, new Comparator<Book>() {
            @Override
            public int compare(Book o1, Book o2) {
                return o1.title.length() - o2.title.length();
            }
        });


        for(Book i : l)
        {
            System.out.println(i.title);
        }
    }
}
import java.util.*;
公共类排序
{
公共静态void main(字符串[]args)
{
LinkedList l=新建LinkedList();
l、 增加(新书(“瓦尔加斯·弗雷德”、“伊尔·穆尔索·德拉·雷库萨”);
l、 增加(新书(“Postorino Rossella”,“Le assaggiatrici”);
l、 增加(新书(“Bythell Shaun”,“图书馆的生活”);
l、 增加(新书(“西门农·乔治”,“博蒂格里亚之家”);
Collections.sort(l,新的Comparator(){
@凌驾
公共整数比较(o1册、o2册){
返回o1.title.length()-o2.title.length();
}
});
(第一册第一册)
{
系统输出打印号(i.标题);
}
}
}
预期: -博蒂利亚方多酒店 -里库萨莫尔索酒店 -阿萨吉亚特里奇酒店 -图书馆的生活

结果: -阿萨吉亚特里奇酒店 -图书馆的生活 -里库萨莫尔索酒店
-Il fondo della bottiglia

如果您想按字母顺序而不是标题的长度对书籍进行排序,您需要使用以下命令:

return o1.title.compareTo(o2.title);

如果要按字母顺序而不是标题的长度对书籍进行排序,则需要使用以下命令:

return o1.title.compareTo(o2.title);

这应该能解决你的问题。我正在使用lambdas和jdk8

下面是一个示例
类:

public class Book {

  final String author;
  final String title;


  public Book(String author, String title) {
    this.author = author;
    this.title = title;

  }

  public String title() {
    return this.title;
  }

  public String author() {
    return this.author;
  }
}
现在比较发生在这里:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortTest {

  public static void main(String... args) {
    List<Book> l = new ArrayList<>();
    l.add(new Book("Vargas Fred", "Il morso della reclusa"));
    l.add(new Book("Postorino Rossella", "Le assaggiatrici"));
    l.add(new Book("Bythell Shaun", "Una vita da libraio"));
    l.add(new Book("Simenon Georges", "Il fondo della bottiglia"));

    Collections.sort(l, Comparator.comparing(Book::title));
    l.forEach(book -> System.out.println(book.title));
  }

}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共类分类测试{
公共静态void main(字符串…参数){
列表l=新的ArrayList();
l、 增加(新书(“瓦尔加斯·弗雷德”、“伊尔·穆尔索·德拉·雷库萨”);
l、 增加(新书(“Postorino Rossella”,“Le assaggiatrici”);
l、 增加(新书(“Bythell Shaun”,“图书馆的生活”);
l、 增加(新书(“西门农·乔治”,“博蒂格里亚之家”);
Collections.sort(l,Comparator.comparating(Book::title));
l、 forEach(book->System.out.println(book.title));
}
}

这应该可以解决您的问题。我正在使用lambdas和jdk8

下面是一个示例
类:

public class Book {

  final String author;
  final String title;


  public Book(String author, String title) {
    this.author = author;
    this.title = title;

  }

  public String title() {
    return this.title;
  }

  public String author() {
    return this.author;
  }
}
现在比较发生在这里:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortTest {

  public static void main(String... args) {
    List<Book> l = new ArrayList<>();
    l.add(new Book("Vargas Fred", "Il morso della reclusa"));
    l.add(new Book("Postorino Rossella", "Le assaggiatrici"));
    l.add(new Book("Bythell Shaun", "Una vita da libraio"));
    l.add(new Book("Simenon Georges", "Il fondo della bottiglia"));

    Collections.sort(l, Comparator.comparing(Book::title));
    l.forEach(book -> System.out.println(book.title));
  }

}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共类分类测试{
公共静态void main(字符串…参数){
列表l=新的ArrayList();
l、 增加(新书(“瓦尔加斯·弗雷德”、“伊尔·穆尔索·德拉·雷库萨”);
l、 增加(新书(“Postorino Rossella”,“Le assaggiatrici”);
l、 增加(新书(“Bythell Shaun”,“图书馆的生活”);
l、 增加(新书(“西门农·乔治”,“博蒂格里亚之家”);
Collections.sort(l,Comparator.comparating(Book::title));
l、 forEach(book->System.out.println(book.title));
}
}

您正在按标题长度排序。这就是您想要做的吗?请不要对
链接列表进行排序,而是使用
ArrayList
。也许可以使用compareTo进行排序?您是按标题长度排序的。这就是你想要做的吗?请不要对
链接列表进行排序,而是使用
ArrayList
。也许可以使用compareTo来代替?你是对的,这正是我想要做的!谢谢你说得对,这正是我想要做的!谢谢