集合对象的几种初始化方式

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。集合对象的几种初始化方式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

  1. 最简单的方式是通过new构建一个对象,构建对象后再进行赋值:
// 通过new创建并赋值
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);

Map<Integer, Integer> map = new HashMap<>();
map.put(1, 1);
map.put(2, 2);
map.put(3, 3);
  1. new对象的同时进行赋值:
// 创建对象同时赋值
List<Integer> list = new ArrayList<Integer>() {{
    add(1);
    add(2);
    add(3);
}};

Set<Integer> set = new HashSet<Integer>() {{
    add(1);
    add(2);
    add(3);
}};

Map<Integer, Integer> map = new HashMap<Integer, Integer>() {{
    put(1, 1);
    put(2, 2);
    put(3, 3);
}};
  1. 对于list集合还可以通过Arrays.asList来构建,但是这种方式构建的集合是不可变的:
// 通过Arrays.asList构建
List<Integer> list = Arrays.asList(1, 2, 3);

当我们向集合中添加元素时会报错:

list.add(4);

抛出的异常:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.add(AbstractList.java:148)
	at java.util.AbstractList.add(AbstractList.java:108)
	at org.example.CollectTest.main(CollectTest.java:23)
  1. 可以通过Stream构建集合:
// 通过stream创建
List<Integer> list = Stream.of(1, 2, 3).collect(Collectors.toList());

Set<Integer> set = Stream.of(1, 2, 3).collect(Collectors.toSet());

Map<Integer, Integer> map = Stream.of(1, 2, 3).collect(Collectors.toMap(key -> key, val -> val));

这种方式构建map集合时,要注意key不能重复,否则会报错:

Map<Integer, Integer> map = Stream.of(1, 2, 3, 3).collect(Collectors.toMap(key -> key, val -> val));

抛出的异常:

Exception in thread "main" java.lang.IllegalStateException: Duplicate key 3
	at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
	at java.util.HashMap.merge(HashMap.java:1254)
	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.example.CollectTest.main(CollectTest.java:20)
  1. 构建单个元素的集合,个人感觉这种构建方式非常简单,而且在项目中用的场景还挺多。
// 构建单个元素的集合
List<Integer> list = Collections.singletonList(1);

Set<Integer> set = Collections.singleton(1);

Map<Integer, Integer> map = Collections.singletonMap(1, 1);

这种方式构建的集合也是不可变集合,添加元素会报错。

  1. 构建空集合
// 构建空集合
List list = Collections.EMPTY_LIST;

Set set = Collections.EMPTY_SET;

Map map = Collections.EMPTY_MAP;

这种方式构建的集合不可变,添加元素会抛异常,但是这种集合有什么用呢!想了一下有时候我们向前端返回接口数据时,如果没有查询到数据返回值就是null,没有意义的null值前端不希望返回,这时候使用这种空集合返回给前端就可以避免多余的判断逻辑,而且空集合对象不用重复构建,节省了内存空间,集合的不可变更省去了多线程的安全问题。所以这种方式非常适合这种场景的使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/181834.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!