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