阅读说明:

1.如果有排版格式问题,请移步 《后端开发小技巧-java集合创建》,选择宽屏模式效果更佳。

2. 本文为原创文章,转发请注明出处。

后端开发中集合是经常会用到的类型。java原生的集合方法难以满足要求,commons-collections库和guava库扩充了集合的功能,帮助我们写出简洁优雅的代码。maven导入方式如下。

<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.3</version>
</dependency>
</dependencies>

本文将列举业务开发中List, Set, Map三大集合中常用的方法。

List

list初始化

原生方式

List<String> monthList = new ArrayList<>();
monthList.add("January");
monthList.add("February");
monthList.add("March");

匿名类方式

List<String> monthList = new ArrayList<String>() {
{
add("January");
add("February");
add("March");
}
};

数组转List方式

List<String> monthList = new ArrayList<>(Arrays.asList("January", "February", "March"));

java9方式

List<String> monthList = List.of("January", "February", "March");

guava方式

List<String> monthList = Lists.newArrayList("January", "February", "March");

java stream方式

 List<String> monthList = Stream.of("January", "February", "March").collect(Collectors.toList());

不可变List

Collections.unmodifiableList方式

 List<String> monthList1 = Collections.unmodifiableList(monthList);

guava方式

  List<String> monthList1 = ImmutableList.<String>builder()
.add("January")
.add("February")
.add("March")
.build();
List<String> monthList2 = ImmutableList.of("January", "February", "March");

其他

判空

 System.out.println(CollectionUtils.isEmpty(monthList));
System.out.println(CollectionUtils.isNotEmpty(monthList));

指定容量

List<String> monthList = Lists.newArrayListWithCapacity(100);  //比原生方式new ArrayList<>(100)简单易懂

兼容null对象

CollectionUtils.emptyIfNull(monthList).forEach(System.out::println);

Set

set初始化

原生方式

Set<String> monthSet = new HashSet<>();
monthSet.add("January");
monthSet.add("February");
monthSet.add("March");

匿名类方式

 Set<String> monthSet = new HashSet<String>() {
{
add("January");
add("February");
add("March");
}
};

数组转Set方式

Set<String> monthSet = new HashSet<>(Arrays.asList("January", "February", "March"));

java9方式

Set<String> monthSet = Set.of("January", "February", "March");

guava方式

Set<String> monthSet = Sets.newHashSet("January", "February", "March");

java stream方式

Set<String> monthSet = Stream.of("January", "February", "March").collect(Collectors.toSet());

不可变Set

Collections.unmodifiableSet方式

 Set<String> monthSet1 = Collections.unmodifiableSet(monthSet);

guava方式

 Set<String> monthSet2 = ImmutableSet.<String>builder()
.add("January")
.add("February")
.add("March")
.build();
Set<String> monthSet3 = ImmutableSet.of("January", "February", "March");

其他

判空

 System.out.println(CollectionUtils.isEmpty(monthSet));
System.out.println(CollectionUtils.isNotEmpty(monthSet));

指定容量

Set<String> monthSet = Sets.newHashSetWithExpectedSize(100);  //比原生方式new HashSet<>(100)简单易懂

兼容null对象

CollectionUtils.emptyIfNull(monthSet).forEach(System.out::println);

Map

map初始化

原生方式

Map<String, Integer> monthMap = new HashMap<String, Integer>();
monthMap1.put("January", 1);
monthMap1.put("February", 2);
monthMap1.put("March", 3);

匿名类方式

  Map<String, Integer> monthMap = new HashMap<String, Integer>() {
{
put("January", 1);
put("February", 2);
put("March", 3);
}
};

java9新特性

Map<String, Integer> monthMap = Map.of("January", 1, "February", 2, "March", 3);

不可变map

Collections.unmodifiableMap

使用Collections.unmodifiableMap包装,转换为不可变map

Map<String, Integer> monthMap1 = Collections.unmodifiableMap(monthMap);

guava方式

支持两种写法:builder方式和of方式。

     Map<String, Integer> monthMap1 = ImmutableMap.<String, Integer>builder()
.put("January", 1)
.put("February", 2)
.put("March", 3)
.build();
Map<String, Integer> monthMap2 = ImmutableMap.of(
"January", 1,
"February", 2,
"March", 3);

其他

判空

 System.out.println(MapUtils.isEmpty(monthMap));
System.out.println(MapUtils.isNotEmpty(monthMap));

指定容量

Map<String, Integer> monthMap = Maps.newHashMapWithExpectedSize(100);

兼容null对象

MapUtils.emptyIfNull(monthMap).forEach((key, value) -> System.out.println(key));

v

java后端开发小技巧-集合初始化多种方法的更多相关文章

  1. Java开发小技巧(三):Maven多工程依赖项目

    前言 本篇文章基于Java开发小技巧(二):自定义Maven依赖中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发. 下面以多可执行Jar包项目的开发为例 ...

  2. TP开发小技巧

    TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...

  3. Java后端开发——美团(牛客)

    Java后端开发--美团(牛客) Java的基本数据类型,各自的字节数 ​ 老生常谈,不多说了. 类型 字节数 byte 1字节 short 2字节 int 4字节 long 8字节 float 4字 ...

  4. 2022美团Java后端开发春招实习面经

    2022美团Java后端开发春招实习面经 一面 1.讲一下计算机网络的五层架构,每层分别有什么协议 ​ 五层架构:应用层.运输层.网络层.数据链路层.物理层 ​ 2.什么是 Http 协议,各种 Ht ...

  5. BizTalk开发小技巧

    BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...

  6. Java后端开发奋斗之路

    本人方向:Java后端开发方向,本文中内容持续更新中 Java技术栈:https://www.cnblogs.com/wyb666/p/10222070.html 推荐书籍:<程序员代码面试指南 ...

  7. Java后端开发常用工具

    Java后端开发常用工具推荐: 俗话说,工欲善其事,必先利其器.不过初学时候不大建议过度依赖IDE等过多工具,这会让自己的编程基础功变得很差,比如各种语法的不熟悉,各种关键字比如synchronize ...

  8. OMG,12 个精致的 Java 字符串操作小技巧,学它

    字符串可以说是 Java 中最具有代表性的类了,似乎没有之一哈,这就好像直播界的李佳琪,脱口秀中的李诞,一等一的大哥地位.不得不承认,最近吐槽大会刷多了,脑子里全是那些段子,写文章都有点不由自主,真的 ...

  9. Java 后端开发常用的 10 种第三方服务

    请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 严格意义上 ...

  10. 规范——Java后端开发规范

    Java后端开发规范 一.技术栈规约 二.命名规范 三.Java代码规范(注释规范.异常与日志.代码逻辑规范) 四.Mybatis与SQL规范 五.结果检查(单元测试及代码扫描) 六.安全规范 一.技 ...

随机推荐

  1. Web前端入门第 13 问:HTML 标签和属性是否区分大小写?

    HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 注意:以下截图都来源于 Chrome 浏览器,不同浏览器可能会产生不同的渲染结果. 思考一个问题:英文写法都分大 ...

  2. wincurl:一款基于HTTP协议的轻量级web资源抓取和上传工具

    编写web程序经常要进行接口调测,通常我们会使用curl或者postman等工具,通过这些工具可以方便的发送GET或POST请求来验证接口的正确与否. 对于复杂的接口业务,我们可以通过这些工具构造po ...

  3. 【Vue3】下载zip文件损坏的问题

    需求: 需要在vue3上实现Asp.net Web API 下载zip包的功能,本身需求很简单,但是中间遇到了问题,记录一下. 问题: 下载的zip包和后端的zip包大小不一致,后端生成的zip 61 ...

  4. AI与.NET技术实操系列(八):使用Catalyst进行自然语言处理

    引言 自然语言处理(Natural Language Processing, NLP)是人工智能领域中最具活力和潜力的分支之一.从智能客服到机器翻译,再到语音识别,NLP技术正以其强大的功能改变着我们 ...

  5. OpenGL与GLSL各版本对应说明

    OpenGL 4.6 (API Core Profile) (API Compatibility Profile) OpenGL Shading Language 4.60 Specification ...

  6. 网络设备开局配置生成器(第三次更新) QQ交流群:(4817315)

    下载:链接: https://pan.baidu.com/s/1BIvh3u7VfbaQtBsUOjl1IA?pwd=kgtw 提取码: kgtw 网络设备开局配置生成器(SecureCRT vbs脚 ...

  7. DeepSeek 官方推出的实用集成工具百宝箱,建议收藏!

    项目介绍 该实用集成工具百宝箱汇聚了DeepSeek官方精心挑选和推荐的各类集成工具(其中包括:应用程序.AI Agent 框架.AI数据应用框架.RAG 框架.浏览器插件.VS Code 插件等), ...

  8. 【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题

    [QT]解决生成的exe文件出现"无法定位程序入口"或"找不到xxx.dll"的问题 零.问题 使用QT编译好项目后,想直接在文件资源管理器中运行exe程序或想 ...

  9. unigui的程序编译后自动运行傻傻的手动【7】

    我们每次修改unigui程序后,一般需要编译后执行,查看效果.可是每次都要关闭杀掉服务程序,再刷新浏览器才能实现. EMB应该知道这个反人类的做法吧.实际上提供了参数配置:自动kill服务程序,自动打 ...

  10. 【U-Boot】解决U-Boot的“Unknown command 'help' - try 'help'”问题

    [U-Boot]解决U-Boot的"Unknown command 'help' - try 'help'"问题 零.起因 最近在玩U-Boot,自己编译U-Boot之后输入hel ...