如何通过构造初始化HashSet值?

我需要用初始值创建一个Set

Set<String> h = new HashSet<String>();
h.add("a");
h.add("b");

有没有办法在一行代码中做到这一点?


我使用的速记不是非常省时,但适用于单行:

Set<String> h = new HashSet<>(Arrays.asList("a", "b"));

同样,由于您正在构建数组,转换为列表并使用该列表创建集合,因此这不是时间有效的。

初始化静态最终集时,我通常会这样写:

public static final String[] SET_VALUES = new String[] { "a", "b" };
public static final Set<String> MY_SET = new HashSet<>(Arrays.asList(SET_VALUES));

对于静态初始化来说,略微不那么丑陋,效率并不重要。


集合文字预定为Java 7,但没有进入。所以没有自动化。

你可以使用番石榴的Sets

Sets.newHashSet("a", "b", "c")

或者你可以使用下面的语法,它将创建一个匿名类,但它很不好:

Set<String> h = new HashSet<String>() {{
    add("a");
    add("b");
}};

在Java 8中,我将使用:

Set<String> set = Stream.of("a", "b").collect(Collectors.toSet());

这给你一个可变的Set用“a”和“b”预先初始化。 请注意,在JDK 8中,这确实会返回一个HashSet ,但规范并不能保证它,并且这可能会在将来发生变化。 如果你特别想要一个HashSet ,可以这样做:

Set<String> set = Stream.of("a", "b")
                        .collect(Collectors.toCollection(HashSet::new));
链接地址: http://www.djcxy.com/p/4761.html

上一篇: How to initialize HashSet values by construction?

下一篇: What is the difference between List.of and Arrays.asList?