Java初始化List的6种方式
时间:2022-07-23
本文章向大家介绍Java初始化List的6种方式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、常规方式
这种就是我们平常用的最多最平常的方式了,没什么好说的,后面缺失的泛型类型在 JDK 7 之后就可以不用写具体的类型了,改进后会自动推断类型。
List<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("PHP");
languages.add("Python");
System.out.println(languages);
二、Arrays工具类
这种方式添加的是不可变的 List, 即不能添加、删除等操作,需要警惕.
List<String> jdks = asList("JDK6", "JDK8", "JDK10");
System.out.println(jdks);
如果要可变,那就使用 ArrayList 再包装一下,如下面所示。
List<String> numbers = new ArrayList<>(Arrays.asList("1", "2", "3"));
numbers.add("4");
System.out.println(numbers);
三、Collections 工具类
List<String> apples = Collections.nCopies(3, "apple");
System.out.println(apples);
这种方式添加的是不可变的、复制某个元素N遍的工具类,以上程序输出:
[apple, apple, apple]
老规则,如果要可变,使用 ArrayList 包装一遍。
List<String> dogs = new ArrayList<>(Collections.nCopies(3, "dog"));
dogs.add("dog");
System.out.println(dogs);
还有初始化单个对象的 List 工具类,这种方式也是不可变的,集合内只能有一个元素,用得很少。
List<String> cat = Collections.singletonList("cat");
System.out.println(cat);
还有一个创建空 List 的工具类,没有默认容量,节省空间
List<String> cat = Collections.emptyList("cat");
四、匿名内部类
这种使用了匿名内部类的方式,可以在创建list的时候指定内部对象,可以让代码变的简洁一点。
List<String> names = new ArrayList<>() {{
add("Tom");
add("Sally");
add("John");
}};
System.out.println(names);
这里的双括号”{{}}”到底什么意思,什么用法呢?第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。在java中,很多结构新建的时候都可以采用这种方式,比如新建HashMap的时候指定初始值
HashMap<String, String> map = new HashMap<String, String>() {
{
map.put("name", "test");
map.put("age", "20");
}
};
五、JDK8 Stream
Stream 是 JDK 8 推出来的新概念,比集合还要更强大,还可以和集合互相转换。
List<String> colors = Stream.of("1", "4", "2").collect(Collectors.toList());
System.out.println(colors);
六、JDK 9 List.of
这是 JDK 9 里面新增的 List 接口里面的静态方法,同样也是不可变的。
List<String> cups = List.of("A", "B", "C");
System.out.println(cups);
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Codeforces Round #615 (Div. 3)C. Product of Three Numbers
- Codeforces Round #622 (Div. 2) A.Fast Food Restaurant
- 渗透测试实战 | 一次信息泄露引发的越权
- Vue创建项目及基本语法 一
- 学 Java 开发怎么能不知道 Filter 与 Listener
- Windows 安装 MySQL 常见问题
- LootCode-链表排序-Java
- 好久不用 jQuery, 来复习一下
- Spring学习一、组件注册
- 复习 EL 表达式与 JSTL
- Spring 学习二、Bean生命周期相关注解
- 十分钟学会 HTML
- 聊一下会话跟踪技术
- 朝花夕拾之Matlab基础回顾:向量的点积、叉积、混合积
- 详解响应消息 response