Java如何对链表进行排序?

all*_*ded 23 java linked-list

我需要按字母顺序对链表进行排序.我有一个链接列表,其中包含乘客姓名,并且需要按字母顺序对乘客姓名进行排序.怎么会这样做?有人有任何参考或视频吗?

mre*_*mre 30

您可以使用Collections#sort按字母顺序对事物进行排序.

  • 如果它是`List <String>`,则不需要自定义比较器. (4认同)
  • @allencoded,您需要做的就是`Collections.sort(NameList1);`,然后您的列表将按字母顺序排序. (3认同)

Fed*_*era 23

为了按字母顺序对字符串进行排序,您需要使用a Collator,如:

 LinkedList<String> list = new LinkedList<String>();
 list.add("abc");
 list.add("Bcd");
 list.add("aAb");
 Collections.sort(list, new Comparator<String>() {
     @Override
     public int compare(String o1, String o2) {
         return Collator.getInstance().compare(o1, o2);
     }
 });
Run Code Online (Sandbox Code Playgroud)

因为如果你只是打电话,Collections.sort(list)你将遇到包含大写字符的字符串的麻烦.

例如,在我粘贴的代码中,在排序后列表将是:[aAb, abc, Bcd]但如果你只是打电话,Collections.sort(list);你会得到:[Bcd, aAb, abc]

注意:使用a时,Collator您可以指定语言环境,Collator.getInstance(Locale.ENGLISH)这通常非常方便.


Tia*_*opo 8

在java8中,您不再需要使用Collections.sort方法,因为LinkedList从java.util.List继承了方法排序,因此使Fido的答案适应Java8:

    LinkedList<String>list = new LinkedList<String>();
    list.add("abc");
    list.add("Bcd");
    list.add("aAb");

    list.sort( new Comparator<String>(){
    @Override
        public int compare(String o1,String o2){
            return Collator.getInstance().compare(o1,o2);
        }
    });
Run Code Online (Sandbox Code Playgroud)

参考文献:

http://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html

http://docs.oracle.com/javase/7/docs/api/java/util/List.html

  • 在java8中你也可以使用lambda:`list.sort((a, b) -&gt; Collat​​or.getInstance().compare(a, b))`。遗憾的是,如果没有显式的“Comparator”,“list::sort”不支持自然排序。 (2认同)

Vin*_*ini 5

自 JAVA 8 以来的优雅解决方案:

LinkedList<String>list = new LinkedList<String>();
list.add("abc");
list.add("Bcd");
list.add("aAb");

list.sort(String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 lambda 表达式:

list.sort((o1, o2) -> o1.compareToIgnoreCase(o2));
Run Code Online (Sandbox Code Playgroud)