双括号匿名类分析、list快速创建方式


快速生成list: Java快速创建List常用几种方式_旷野历程的博客-CSDN博客_java 快速创建list

由其中的匿名内部类方式创建引发了对匿名类的好奇:

List<Integer> list= new ArrayList() {{
    add(1);
    add(2);
    add(3);
}};

匿名类的定义:实现一个类且不需要提供任何的类名直接实例化。

匿名类通常继承一个父类或实现一个接口。(因此私有属性,通过匿名类是没法直接使用的)

在这里插入图片描述

使用双括号进行list初始化的解释:匿名内部类的写法以及注意点 - CSDN

//新建hashmap的初始化也可以使用双大括号
Map map = new HashMap(){{
    put("Name", "Unmi"); 
  put("QQ", "1125535"); 
}}

理解:第一层括号理解成定义了一个继承于该实现类的匿名类,第二层理解为初始化块。

注意:这种方法一定程度上使代码更简洁,但同时可能降低可读性;还可能会造成内存泄露,在序列化时可能也会出现一些问题(未测试)

当我们想构造一个数组列表,并将它传递到一个方法时,最初的写法如下:

ArrayList friends=new ArrayList<>();

friends.add(“tom”);

friends.add(“lin”);

invite(friends);

//不写数组列表,将其作为一个匿名列表,通过双括号的方式为列表添加元素,这样代码更为简洁。
invite(new ArrayList(){{
    add("tom");
	add("lin");
}});

快速生成list的方式

1、常规操作 new ArrayList<>() 创建
List list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
2、Arrays工具类创建
List list = Arrays.asList(1, 2, 3);
Arrays.asList() 方法是 Arrays 的静态方法。这种方式构造的 List 是固定长度的,如果调用 add 方法增加新的元素时会报异常 java.lang.UnsupportedOperationException。这种方式仅适用于构造静态不变的 List。
如果想要改变可以通过 ArrayLis t进行包装成动态。

List list = Arrays.asList(1, 2, 3);
list = new ArrayList<>(list);
list.add(4);
3、Stream创建
List list = Stream.of(1, 2, 3).collect(Collectors.toList());
4、匿名内部类创建
List list= new ArrayList() {{
add(1);
add(2);
add(3);
}};
5、Hutool工具类创建
List list = CollectionUtil.newArrayList(1, 2, 3);
6、guava工具类创建
import com.google.common.collect.Lists;

List list = Lists.newArrayList(1, 2, 3);
7、JDK9 引入的Lists创建
List list = Lists.newArrayList(1, 2, 3);
8、JDK9引入 List.of (不可变)
List list = List.of(1,2,3);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值