如何按字母顺序排列列表?

我有一个包含国家名称的List<String>对象。 我怎样才能按字母顺序排列这个列表?

假设这些是string,使用方便的静态方法sort

  java.util.Collections.sort(listOfCountryNames) 

解决scheme与Collections.sort

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

  • 创build列表
  • 添加一些国家名称
  • 分类一次
  • 永远不要再改变这个列表

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

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

带有TreeSet的解决scheme

如果您可以自由决定,并且您的应用程序可能变得更复杂,那么您可以改变您的代码来使用TreeSet。 这种集合只是在插入时对input进行sorting。 不需要调用sort()。

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

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

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

  • 它只是更短。 虽然只有一行较短。
  • 不用担心这个列表是否真的被sorting,因为TreeSet总是被sorting,不pipe你做什么。
  • 你不能有重复的条目。 根据你的情况,这可能是一个专业或一个骗局。 如果您需要重复,请坚持您的列表。
  • 一位经验丰富的程序员看着TreeSet<String> countyNames并立即知道: 这是一个没有重复的string的sorting集合,我可以肯定这是真实的每一个时刻 。 如此多的信息在一个简短的声明。
  • 在某些情况下真正的performance胜利。 如果您使用List,并且经常插入值,并且列表可能在这些插入之间被读取,那么您必须在每次插入之后对列表进行sorting。 该集合是一样的,但速度更快。

为正确的任务使用正确的集合是编写短而无缺陷的代码的关键。 这不是在这种情况下的示范,因为你只保存一行。 但是我已经停止计算,当他们想要确保没有重复的时候,看到有人使用列表的次数,然后自己构build这个function。 甚至更糟糕的是,当你真的需要一个地图时使用两个列表。

不要误解我的意思:使用Collections.sort不是错误或缺陷。 但是有很多情况下TreeSet更清洁。

您可以使用Java 8 Stream或Guava创build新的sorting副本:

 // Java 8 version List<String> sortedNames = names.stream().sorted().collect(Collectors.toList()); // Guava version List<String> sortedNames = Ordering.natural().sortedCopy(names); 

另一种select是通过Collections API进行就地sorting:

 Collections.sort(names); 

迟到总比不到好! 以下是我们如何做到这一点 –

 import java.util.List; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; class SoftDrink { String name; String color; int volume; SoftDrink (String name, String color, int volume) { this.name = name; this.color = color; this.volume = volume; } } public class ListItemComparision { public static void main (String...arg) { List<SoftDrink> softDrinkList = new ArrayList<SoftDrink>() ; softDrinkList .add(new SoftDrink("Faygo", "ColorOne", 4)); softDrinkList .add(new SoftDrink("Fanta", "ColorTwo", 3)); softDrinkList .add(new SoftDrink("Frooti", "ColorThree", 2)); softDrinkList .add(new SoftDrink("Freshie", "ColorFour", 1)); Collections.sort(softDrinkList, new Comparator() { @Override public int compare(Object softDrinkOne, Object softDrinkTwo) { //use instanceof to verify the references are indeed of the type in question return ((SoftDrink)softDrinkOne).name .compareTo(((SoftDrink)softDrinkTwo).name); } }); for (SoftDrink sd : softDrinkList) { System.out.println(sd.name + " - " + sd.color + " - " + sd.volume); } Collections.sort(softDrinkList, new Comparator() { @Override public int compare(Object softDrinkOne, Object softDrinkTwo) { //comparision for primitive int uses compareTo of the wrapper Integer return(new Integer(((SoftDrink)softDrinkOne).volume)) .compareTo(((SoftDrink)softDrinkTwo).volume); } }); for (SoftDrink sd : softDrinkList) { System.out.println(sd.volume + " - " + sd.color + " - " + sd.name); } } } 

使用Collections.sort的两个参数。 你将需要一个合适的Comparator来处理合适的情况(即,做词法,而不是UTF16sorting),比如通过java.text.Collator.getInstance获得的。

除非您只用无重音的英文排列string,否则可能需要使用Collator 。 它会正确地分类变音符号,可以忽略大小写和其他语言特定的东西:

 Collections.sort(countries, Collator.getInstance(new Locale(languageCode))); 

您可以设置整理器的强度 ,请参阅javadoc。

以下是斯洛伐克的一个例子:

 List<String> countries = Arrays.asList("Slovensko", "Švédsko", "Turecko"); Collections.sort(countries); System.out.println(countries); // outputs [Slovensko, Turecko, Švédsko] Collections.sort(countries, Collator.getInstance(new Locale("sk"))); System.out.println(countries); // outputs [Slovensko, Švédsko, Turecko] 

这是你在找什么

 listOfCountryNames.sort(String::compareToIgnoreCase) 

通过使用Collections.sort() ,我们可以对列表进行sorting。

 public class EmployeeList { public static void main(String[] args) { // TODO Auto-generated method stub List<String> empNames= new ArrayList<String>(); empNames.add("sudheer"); empNames.add("kumar"); empNames.add("surendra"); empNames.add("kb"); if(!empNames.isEmpty()){ for(String emp:empNames){ System.out.println(emp); } Collections.sort(empNames); System.out.println(empNames); } } } 

输出:

 sudheer kumar surendra kb [kb, kumar, sudheer, surendra] 
 //Here is sorted List alphabetically with syncronized package com.mnas.technology.automation.utility; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; /** * * @author manoj.kumar */ public class SynchronizedArrayList { static Logger log = Logger.getLogger(SynchronizedArrayList.class.getName()); @SuppressWarnings("unchecked") public static void main(String[] args) { List<Employee> synchronizedList = Collections.synchronizedList(new ArrayList<Employee>()); synchronizedList.add(new Employee("Aditya")); synchronizedList.add(new Employee("Siddharth")); synchronizedList.add(new Employee("Manoj")); Collections.sort(synchronizedList, new Comparator() { public int compare(Object synchronizedListOne, Object synchronizedListTwo) { //use instanceof to verify the references are indeed of the type in question return ((Employee)synchronizedListOne).name .compareTo(((Employee)synchronizedListTwo).name); } }); /*for( Employee sd : synchronizedList) { log.info("Sorted Synchronized Array List..."+sd.name); }*/ // when iterating over a synchronized list, we need to synchronize access to the synchronized list synchronized (synchronizedList) { Iterator<Employee> iterator = synchronizedList.iterator(); while (iterator.hasNext()) { log.info("Sorted Synchronized Array List Items: " + iterator.next().name); } } } } class Employee { String name; Employee (String name) { this.name = name; } } 

字母降序:

 List<String> list; ... Collections.sort(list); Collections.reverse(list); 

与JAVA 8相同: –

 //Assecnding order listOfCountryNames.stream().sorted().forEach((x) -> System.out.println(x)); //Decending order listOfCountryNames.stream().sorted((o1, o2) -> o2.compareTo(o1)).forEach((x) -> System.out.println(x)); 

你可以尝试使用我制作的方法。

String key – 将是你想要的顺序,在这种情况下按字母顺序。 只要把“abc …”。

String list[] – 您要按顺序放置的列表。

int index – 设置为0,将设置该键的偏移量。

  public static String[] order(String key, String list[], int index) { ArrayList<String> order_List = new ArrayList<String>(); ArrayList<String> temp_Order_List = null; char[] key_char = key.toCharArray(); for (int offset = 0; offset < key_char.length; offset++) { if (key_char.length >= offset + index) { String str = (index > 1 ? list[0].substring(0, index - 1) : "") + new String(key_char, offset, 1); for (int i = 0; i < list.length; i++) { temp_Order_List = new ArrayList<String>(); for (int k = 0; k < list.length; k++) { if (!order_List.contains(list[k]) && !temp_Order_List.contains(list[k])) { if (list[k].equalsIgnoreCase(str)) order_List.add(list[k]); else if (list[k].toLowerCase().startsWith(str.toLowerCase())) { temp_Order_List.add(list[k]); } } } if (temp_Order_List.size() > 0) { if (temp_Order_List.size() > 1) { String[] add = order(key, temp_Order_List.toArray(new String[temp_Order_List .size()]), index + 1); for (String s : add) { order_List.add(s); } } else { order_List.add(temp_Order_List.get(0)); } } } } } return order_List.toArray(new String[order_List.size()]); }