如何通过构造初始化HashSet值?| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看活动链接

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

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

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

有没有办法在一行代码中做到这一点?例如,它对于最终的静态字段很有用

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

如果您正在寻找初始化集合的最紧凑的方法,那就在Java9:

Set<String> strSet = Set.of("Apple", "Ball", "Cat", "Dog");
复制代码

=====================下面的详细答案=========================== =======
使用Java 10(不可修改集)

Set<String> strSet1 = Stream.of("A", "B", "C", "D")
         .collect(Collectors.toUnmodifiableSet());
复制代码

从set -> (Set)Set.of(set.toArray())源代码中的语句可以明显看出,收集器实际上将返回Java 9中引入的不可修改集合。

需要注意的一点是,该方法Collections.unmodifiableSet()返回指定集的不可修改视图(根据文档)。的修改视图集合是集合,是不可修改的,并且也是图到背衬集合。请注意,变更为后盾收集可能仍然是可能的,如果它们发生,他们是通过修改视图可见。但是该方法Collectors.toUnmodifiableSet()返回Java 10中真正不变的集合。
使用Java 9(不可修改集)

以下是初始化集合的最紧凑的方法:

Set<String> strSet6 = Set.of("Apple", "Ball", "Cat", "Dog");
复制代码

我们有12个此便利工厂方法的重载版本:

    static <E> Set<E> of()

    static <E> Set<E> of(E e1)

    static <E> Set<E> of(E e1, E e2)

    // ....等等

    static <E> Set<E> of(E... elems)
复制代码

那么自然的问题是,为什么我们在拥有var-args时需要重载版本?答案是:每个var-arg方法都会在内部创建一个数组,并且具有重载的版本将避免不必要的对象创建,并且还将使我们免于垃圾回收的开销。
使用Java 8(可修改集)

在Java 8中使用Stream。

Set<String> strSet1 = Stream.of("A", "B", "C", "D")
         .collect(Collectors.toCollection(HashSet::new));

// stream from an array (String[] stringArray)
Set<String> strSet2 = Arrays.stream(stringArray)
         .collect(Collectors.toCollection(HashSet::new));

// stream from a list (List<String> stringList)
Set<String> strSet3 = stringList.stream()
         .collect(Collectors.toCollection(HashSet::new));
复制代码

使用Java 8(不可修改集)
使用Collections.unmodifiableSet()

我们可以Collections.unmodifiableSet()用作:

Set<String> strSet4 = Collections.unmodifiableSet(strSet1);
复制代码

但是它看起来有点尴尬,我们可以这样编写自己的收集器:

class ImmutableCollector {
    public static <T> Collector<T, Set<T>, Set<T>> toImmutableSet() {
        return Collector.of(HashSet::new, Set::add, (l, r) -> {
            l.addAll(r);
            return l;
        }, Collections::unmodifiablSet);
    }
}
复制代码

然后将其用作:

Set<String> strSet4 = Stream.of("A", "B", "C", "D")
             .collect(ImmutableCollector.toImmutableSet());

复制代码

###使用Collectors.collectingAndThen()的另一种方法是使用[Collectors.collectingAndThen()] [6]方法,该方法可以让我们执行附加的整理转换:

import static java.util.stream.Collectors.*;
Set<String> strSet5 = Stream.of("A", "B", "C", "D").collect(collectingAndThen(
   toCollection(HashSet::new),Collections::unmodifiableSet));
复制代码

如果我们只在乎,Set那么我们也可以使用Collectors.toSet()代替Collectors.toCollection(HashSet::new)。

文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/2…

作者建议: 我会选择使用java 8 流处理:Set strSet1 = Stream.of(“A”, “B”, “C”, “D”)
.collect(Collectors.toCollection(HashSet::new));

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞? 求关注❤️ 求分享? 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享