协慌网

登录 贡献 社区

如何通过构造初始化 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")

或者,您可以使用以下语法,这将创建一个匿名类,但它很 hacky:

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

在 Java 8 中,我将使用:

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

这为您提供了一个用 “a” 和 “b” 预先初始化Set请注意,虽然在 JDK 8 中确实返回了HashSet ,但规范不能保证它会在将来发生变化。如果您特别想要HashSet ,请执行以下操作:

Set<String> set = Stream.of("a", "b")
                        .collect(Collectors.toCollection(HashSet::new));