답변:
이제 Java 8을 사용하면 타사 프레임 워크없이이 작업을 수행 할 수 있습니다.
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
수집기를 참조하십시오 .
즐겨!
Guava를 사용하면 다음 과 같이 간단합니다.
Set<String> mySet = ImmutableSet.<String> of("a", "b");
또는 변경 가능한 세트의 경우 :
Set<String> mySet = Sets.newHashSet("a", "b")
더 많은 데이터 유형은 Guava 사용자 가이드를 참조하세요.
Sets.newHashSet("a", "b")
또는Sets.newLinkedHashSet("a", "b")
Sets.newLinkedHashSet()
그 서명으로 존재하지 않습니다. 죄송합니다
Set<String> mySet = ImmutableSet.of("a", "b");
당신은 사용할 수 있습니다
new HashSet<String>(Arrays.asList("a","b"));
0 개 또는 1 개의 멤버가있는 특수한 경우 세트의 경우 다음을 사용할 수 있습니다.
java.util.Collections.EMPTY_SET
과:
java.util.Collections.singleton("A")
java.util.Collections.emptySet()
제 생각에는 유형 안전성 때문에 EMPTY_SET보다 선호됩니다. 컬렉션 클래스의 댓글에서 :Unlike the like-named field, this method is parameterized.
다른 사람들이 말했듯이 다음을 사용하십시오.
new HashSet<String>(Arrays.asList("a","b"));
이것이 Java에 존재 하지 않는 이유 Arrays.asList
는 고정 된 크기의 목록 을 반환하기 때문입니다.
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
보고:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
클래스 Set
내부에는 "고정 크기"의 JDK 구현이 없습니다 Arrays
. 왜 이것을 원합니까? A Set
는 중복이 없음을 보장하지만 직접 입력하는 경우 해당 기능이 필요하지 않으며 List
더 많은 메서드가 있습니다. 두 인터페이스 모두 확장 Collection
및 Iterable
.
다른 사람들이 말했듯이, 이 기능을 정말로 원한다면 구아바를 사용하십시오 -JDK에 없기 때문입니다. 이에 대한 정보는 그들의 답변 (특히 Michael Schmeißer의 답변)을 참조하십시오.
Java 9에서 유사한 기능이 팩토리 메소드를 통해 추가되었습니다.
Set<String> oneLinerSet = Set.of("a", "b", ...);
(동등한 List
것도 있습니다.)
아니요하지만 이렇게 할 수 있습니다
new HashSet<String>(Arrays.asList("a", "b", ...));
다음은 사용할 수있는 작은 방법입니다.
/**
* Utility method analogous to {@link java.util.Arrays#asList(Object[])}
*
* @param ts
* @param <T>
* @return the set of all the parameters given.
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> Set<T> asSet(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
Java 8 및 enum을 사용하여 수행하는 또 다른 방법은 다음과 같습니다.
Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);
EnumSet 참조 .
이 접근 방식과
Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());
5 개 이상의 요소가있는 경우 메서드의 javadoc은 Set.Of (E, E ...) 의 javadoc에서 볼 수 있듯이 성능 문제 일 수 있다고 명시합니다 .