使用comparaTor()按字母顺序对链接列表进行排序?

时间:2015-04-10 14:34:19

标签: java sorting

我有一个LinkedList,它为学生保存数据,每个学生都有一个名字,gpa和ID#,每个学生都是LinkedList中的一个节点。我想按名称按字母顺序对LinkedList进行排序,但我真的不了解如何使用CompareTo()进行排序。所以现在我使用当前name.compareTo(name_of_inputStudent)的字符串compareTo来获得compareTo方法。那么在我的排序方法中,我如何利用该输出对我的数组进行排序?我真的不明白这将如何帮助我识别哪个字符串属于LinkedList中的哪个位置。

3 个答案:

答案 0 :(得分:2)

您可以使用方法Collections.sort(...)。你可以找到javadoc here。要使用该方法,您的Student类必须实现Comparable接口。因此,您必须为Student类选择排序条件,并将其实施到compareTo方法中。

答案 1 :(得分:2)

如果允许您使用Java库,则无需执行任何其他操作:只需将列表传递给sort,当您未通过单独的比较器时,会自动使用compareTo。请注意,排序LinkedList比排序ArrayList更昂贵,因为大多数高级的基于比较的排序算法需要随机访问列表,对于数组列表是O(1),但是O( n)链表。

如果您开始实施自己的排序算法,compareTo可让您确定两个对象是否处于排序位置或是否应切换位置:

  • 如果将距离列表前方较近的物体与远离前方的物体进行比较,结果为负或零,则物体相对于彼此的顺序正确
  • 如果结果为正,则对象应更改位置,以使距离起点更远的对象更接近开头。

仅这两个考虑就足以实现bubble sort

答案 2 :(得分:0)

在LinkedList的Node类中,实现Comparable接口并覆盖compareTo方法。然后你可以使用Collections.sort(List)。 由于您使用的是链接列表,因此排序将是低效的,因为获取LinkedList中的元素是顺序遍历,即O(n)。