[java] HashSet을 정렬하는 방법?

목록의 경우 Collections.sort(List)방법 을 사용합니다 . 정렬하려면 어떻게해야 HashSet합니까?



답변

HashSet은 요소의 순서를 보장하지 않습니다. 이 보장이 필요하면 TreeSet을 사용하여 요소를 보유하는 것이 좋습니다.

그러나이 항목에 대해 정렬 된 요소가 필요한 경우 일시적으로 목록을 만들고 정렬합니다.

Set<?> yourHashSet = new HashSet<>();

...

List<?> sortedList = new ArrayList<>(yourHashSet);
Collections.sort(sortedList);


답변

모든 개체를에 추가 TreeSet하면 정렬 된 세트가 생성됩니다. 아래는 원시 예입니다.

HashSet myHashSet = new HashSet();
myHashSet.add(1);
myHashSet.add(23);
myHashSet.add(45);
myHashSet.add(12);

TreeSet myTreeSet = new TreeSet();
myTreeSet.addAll(myHashSet);
System.out.println(myTreeSet); // Prints [1, 12, 23, 45]


답변

대신 TreeSet을 사용할 수 있습니다 .


답변

정렬하는 Java 8 방법은 다음과 같습니다.

fooHashSet.stream()
  .sorted(Comparator.comparing(Foo::getSize)) //comparator - how you want to sort it
  .collect(Collectors.toList()); //collector - what you want to collect it to

*Foo::getSize YourItem의 HashSet을 크기별로 자연스럽게 정렬하는 방법의 예입니다.

* Collectors.toList()정렬 결과를 목록으로 수집하여 캡처해야합니다.List<Foo> sortedListOfFoo =


답변

java.util.TreeSet실제 개체로 사용하십시오 . 이 컬렉션을 반복하면 값이 잘 정의 된 순서로 돌아옵니다.

사용하는 경우 java.util.HashSet순서는 거의 확실하게 사전식이 아닌 내부 해시 함수에 따라 다릅니다 (콘텐츠 기반).


답변

Java 8 수집기와 TreeSet을 사용할 수 있습니다.

list.stream().collect(Collectors.toCollection(TreeSet::new))


답변

다른 답변에서 언급했듯이 TreeSet을 사용할 수 있습니다.

사용 방법에 대한 자세한 설명은 다음과 같습니다.

TreeSet<String> ts = new TreeSet<String>();
ts.add("b1");
ts.add("b3");
ts.add("b2");
ts.add("a1");
ts.add("a2");
System.out.println(ts);
for (String s: ts)
    System.out.println(s);

산출:

[a1, a2, a3, a4, a5]
a1
a2
b1
b2
b3