sourcecode

목록을 알파벳 순으로 정렬하려면 어떻게 해야 합니까?

copyscript 2022. 8. 29. 22:20
반응형

목록을 알파벳 순으로 정렬하려면 어떻게 해야 합니까?

는 나나 a a a가 있다List<String>국가 이름을 포함하는 개체입니다.이 목록을 알파벳 순으로 정렬하려면 어떻게 해야 하나요?

스트링이라고 가정하면 편리한 정적 방법을 사용합니다.

 java.util.Collections.sort(listOfCountryNames)

컬렉션을 포함한 솔루션.종류

해당 목록을 강제로 사용하거나 프로그램이 다음과 같은 구조를 가진 경우

  • 목록 작성
  • 일부 국가 이름 추가
  • 그것들을 한 번 분류하다
  • 두 번 다시 그 목록을 바꾸지 마라

그럼 Thilos의 답변이 최선의 방법일 겁니다.Tom Hawtin - taxline의 조언과 결합하면 다음과 같은 결과가 나옵니다.

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

Tree Set을 사용한 솔루션

자유롭게 결정할 수 있고 응용 프로그램이 더 복잡해질 수 있는 경우 TreeSet을 대신 사용하도록 코드를 변경할 수 있습니다.이런 종류의 컬렉션은 엔트리를 삽입했을 때만 정렬합니다.sort()를 호출할 필요가 없습니다.

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

Tree Set을 선호하는 이유에 대한 참고 사항

여기에는 다음과 같은 미묘하지만 중요한 이점이 있습니다.

  • 더 짧아요.하지만 한 줄만 더 짧아요.
  • TreeSet은 항상 정렬되어 있기 때문에 이 리스트는 현재 정말로 정렬되어 있다고 걱정할 필요는 없습니다.
  • 중복된 엔트리는 사용할 수 없습니다.상황에 따라서는 찬반 양론이 될 수 있습니다.중복이 필요한 경우 목록을 사용하십시오.
  • 이 풍부한 가 보고 .TreeSet<String> countyNames그리고 바로 알 수 있습니다: 이것은 중복되지 않은 정렬된 Strings 모음입니다. 저는 이것이 항상 사실임을 확신할 수 있습니다.짧은 선언문 안에 많은 정보가 담겨 있습니다.
  • 경우에 따라서는 진정한 퍼포먼스가 향상됩니다.목록을 사용하여 값을 자주 삽입하고 이러한 삽입 사이에 목록을 읽을 수 있는 경우 삽입할 때마다 목록을 정렬해야 합니다.세트는 같은 작업을 하지만 훨씬 더 빠르게 수행합니다.

적절한 작업에 적절한 컬렉션을 사용하는 것은 짧은 버그 없는 코드를 쓰는 열쇠입니다.이 경우 한 줄만 저장하면 되므로 그다지 입증되지 않습니다.다만, 중복이 없는 것을 확인하고, 그 기능을 스스로 구축하려고 할 때에 리스트를 사용하는 빈도는 세지 않게 되었습니다.더 나쁜 것은 지도가 정말 필요할 때 두 개의 목록을 사용한다는 것입니다.

오해하지 마세요.컬렉션 사용.정렬은 오류나 결함이 아닙니다.하지만 TreeSet이 훨씬 더 깨끗한 경우가 많습니다.

Java 8 Stream 또는 Guava를 사용하여 정렬된 새 복사본을 만들 수 있습니다.

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

다른 옵션은 Collections API를 사용하여 일괄 정렬하는 것입니다.

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);
        }   
    }
}

Java 8을 사용하는 한 줄:

list.sort(Comparator.naturalOrder());

악센트가 없는 영어로만 문자열을 정렬하지 않는 한, 아마도 당신은 그것을 사용하고 싶을 것이다.Collator. 발음 구별 마크가 올바르게 정렬되어 대소문자 및 기타 언어 고유의 내용을 무시할 수 있습니다.

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

콜레이터의 강도를 설정할 수 있습니다.javadoc 를 참조해 주세요.

슬로바키아어의 예를 다음에 나타냅니다.Š뒤쫓아야 한다S단, UTF에서는Š다음 어딘가에 있다Z:

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]

다음의 2개의 인수를 사용합니다.Collections.sort적절한 제품이 필요하게 될 것입니다.Comparator(즉, UTF16 순서가 아닌 어휘를 사용하는가)를 통해 얻을 수 있는 것과 같이 적절한 경우를 취급한다.java.text.Collator.getInstance.

여기 당신이 찾고 있는 것이 있습니다.

listOfCountryNames.sort(String::compareToIgnoreCase)

사용방법Collections.sort()목록을 정렬할 수 있습니다.

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]

내림차순 알파벳:

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

다음 행을 사용할 수 있습니다.

Collections.sort(listOfCountryNames, String.CASE_INSENSITIVE_ORDER)

Thilo의 제안과 비슷하지만 대소문자는 차이가 없습니다.

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));

Java 8,

countries.sort((country1, country2) -> country1.compareTo(country2));

String의 compareTo가 요구에 적합하지 않은 경우 다른 비교기를 제공할 수 있습니다.

//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;

}
}

언급URL : https://stackoverflow.com/questions/708698/how-can-i-sort-a-list-alphabetically

반응형