Решение с коллекциями. Сортировка
Если вы вынуждены использовать этот список, или если ваша программа имеет структуру, подобную
- Создать список
- Добавить названия некоторых стран
- отсортировать их один раз
- никогда больше не меняйте этот список
тогда ответ Тилоса будет лучшим способом сделать это. Если вы объедините это с советом Тома Хоутина - tackline , вы получите:
java.util.Collections.sort(listOfCountryNames, Collator.getInstance());
Решение с TreeSet
Если вы можете принимать решение, и если ваше приложение может стать более сложным, вы можете изменить свой код, чтобы использовать вместо него 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
и мгновенно знает: это отсортированная коллекция строк без дубликатов, и я могу быть уверен, что это так в любой момент . Столько информации в короткой декларации.
- Реальная производительность выигрывает в некоторых случаях. Если вы используете список и вставляете значения очень часто, и список может быть прочитан между этими вставками, то вам придется сортировать список после каждой вставки. Набор делает то же самое, но делает это намного быстрее.
Использование правильной коллекции для правильной задачи - это ключ для написания короткого кода без ошибок. В этом случае это не так показательно, потому что вы просто сохраняете одну строку. Но я перестал считать, как часто я вижу, что кто-то использует Список, когда он хочет убедиться, что нет дубликатов, а затем сам создает эту функциональность. Или, что еще хуже, использование двух списков, когда вам действительно нужна карта.
Не поймите меня неправильно: использование Collections.sort не является ошибкой или недостатком. Но есть много случаев, когда TreeSet намного чище.