java9中关于List的新特性

在java 9之前的版本中,List初始化和添加值需要两步进行。

初始化:

List<String> list = new ArrayList<>();

 

添加值:用list.add()方法

 

list.add("1");
list.add("2");
list.add("3");

可以无限的添加。

 

然后输出:

[1, 2, 3]

 

但是在java 9中,他的新特性中,List的初始化和添加值就省略成了一步。

初始化和添加值:用List.of()方法

 

List<String> list1 = List.of("4", "5", "6");

在List.of()中就已经将初始化和添加值完成了。

 

输出:

[4, 5, 6]

但是这个新特性有个很鸡肋的地方,就是在list.of()完成后,这个list就定长了。再使用list.add()就会报异常。

 

list1.add("7");

输出:

 

java.lang.UnsupportedOperationException

为什么会报这个异常呢?我们来看看源码:

list.of()的源码:

 

static <E> List<E> of(E e1, E e2, E e3) {
    return new ImmutableCollections.ListN<>(e1, e2, e3);
}

再继续看ImmutableCollentions.ListN<>的源码:

 

 

在new Object(input.length)中,已经将添加的长度定死了。所以就很奇葩了。

然后我就想了一下,导致这种长度定死了的原因就是,在List.of()中传入参数之后,在ListN(E... input)中,将传入的参数变换成了数组,数组的长度是固定的,所以在List.of()之后,被其初始化和添加值之后的 list1 就无法再运用list1.add()方法添加值,扩展长度。然后我就想了一个很low很"愚蠢"的方法,既然你是数组,固定的数组,那行,我再将你的数组强行转化为List,总可以了吧。代码如下:

新建了一个ListUtils类:

调用ListUtils.append()方法:

 

List<String> list2 = ListUtils.append("7", "8", "9");

初始化和添加值一气呵成,最后输出:

 

[7,8,9]

再接着添加值:

 

list2.add("10");

输出:

 

[7,8,9,10]    (不再报错了)

而且在效率上也相差无几:

 

转载于:https://www.cnblogs.com/zengxb/p/8433800.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值