美文网首页Java干货分享
你知道Java中有不可变ArrayList吗?

你知道Java中有不可变ArrayList吗?

作者: 淡定_蜗牛 | 来源:发表于2019-01-16 10:19 被阅读0次

    1.概述

    本快速教程将展示如何使用核心JDK 创建一个ArrayList不可变,使用Guava,最后使用Apache Commons Collections 4。

    2.使用JDK

    首先,JDK提供了一种从现有集合中获取不可修改集合的好方法:

    Collections.unmodifiableList(list);
    

    此时新集合不再可修改:

    @Test(expected = UnsupportedOperationException.class)
    public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable() {
        List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
        List<String> unmodifiableList = Collections.unmodifiableList(list);
        unmodifiableList.add("four");
    }
    

    3.使用Guava

    Guava提供了类似的功能来创建自己的ImmutableList版本:

    ImmutableList.copyOf(list);
    

    同样 - 结果列表不应该是可修改的:

    @Test(expected = UnsupportedOperationException.class)
    public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable() {
        List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
        List<String> unmodifiableList = ImmutableList.copyOf(list);
        unmodifiableList.add("four");
    }
    

    请注意,此操作实际上将创建原始列表的副本,而不仅仅是视图。

    Guava还提供了一个构建器 - 这将返回强类型的ImmutableList而不是简单的List:

    @Test(expected = UnsupportedOperationException.class)
    public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable() {
        List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
        ImmutableList<Object> unmodifiableList = ImmutableList.builder().addAll(list).build();
        unmodifiableList.add("four");
    }
    

    4.使用Apache Collections Commons

    最后,Commons Collection还提供了一个API来创建一个不可修改的列表:

    ListUtils.unmodifiableList(list);
    

    同样,修改结果列表应该导致UnsupportedOperationException:

    @Test(expected = UnsupportedOperationException.class)
    public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable() {
        List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
        List<String> unmodifiableList = ListUtils.unmodifiableList(list);
        unmodifiableList.add("four");
    }
    

    5.结论

    本教程说明了如何使用核心JDK,Google Guava或Apache Commons Collections 从现有ArrayList轻松创建不可修改的List。

    image

    微信关注:Java知己, 每天更新Java知识哦,期待你的到来!

    image

    相关文章

      网友评论

        本文标题:你知道Java中有不可变ArrayList吗?

        本文链接:https://www.haomeiwen.com/subject/fmvpdqtx.html