如何按字母顺序对列表进行排序?

2022-08-31 05:58:56

我有一个包含国家/地区名称的对象。如何按字母顺序对此列表进行排序?List<String>


答案 1

假设这些是字符串,请使用方便的静态方法排序...

 java.util.Collections.sort(listOfCountryNames)

答案 2

使用 Collections.sort 的解决方案

如果您被迫使用该列表,或者您的程序具有如下结构:

  • 创建列表
  • 添加一些国家名称
  • 对它们进行排序一次
  • 再也不更改该列表

那么Thilos的答案将是最好的方法。如果你把它与Tom Hawtin的建议结合起来 - tackline,你会得到:

java.util.Collections.sort(listOfCountryNames, Collator.getInstance());

具有树集的解决方案

如果您可以自由决定,并且您的应用程序可能会变得更加复杂,那么您可以更改代码以改用 TreeSet。这种集合仅在插入条目时对条目进行排序。无需调用 sort()。

Collection<String> countryNames = 
    new TreeSet<String>(Collator.getInstance());
countryNames.add("UK");
countryNames.add("Germany");
countryNames.add("Australia");
// Tada... sorted.

关于为什么我更喜欢TreeSet的附注

这有一些微妙但重要的优点:

  • 它只是更短。不过,只短了一行。
  • 永远不要担心这个列表现在是否真的排序了,因为无论你做什么,TreeSet总是被排序的。
  • 您不能有重复的条目。根据您的情况,这可能是一个优点或缺点。如果您需要重复项,请坚持使用您的列表。
  • 一个有经验的程序员看着并立即知道:这是一个没有重复的字符串的排序集合,我可以肯定这在每一刻都是真的。在简短的声明中提供了如此多的信息。TreeSet<String> countyNames
  • 在某些情况下,真正的性能是赢家。如果您使用List,并且经常插入值,并且列表可能会在这些插入之间读取,那么您必须在每次插入后对列表进行排序。该套装也执行相同的操作,但执行速度要快得多。

为正确的任务使用正确的集合是编写简短且无错误的代码的关键。在这种情况下,它不那么具有演示性,因为您只保存了一行。但是我已经停止计算我看到某人使用列表的频率,当他们想要确保没有重复时,然后自己构建该功能。或者更糟糕的是,当你真的需要一个地图时,使用两个列表。

不要误会我的意思:使用 Collections.sort 不是错误或缺陷。但是在许多情况下,TreeSet要干净得多。


推荐