网站首页 > 技术文章 正文
在日常的开发中,List作为我们常用的一种数据结构,那么有谁了解过在Java中如何对一个List进行初始化操作。在这些初始化操作中又有哪些遇到的坑呢?
1、常规方式
List<String> languageList = new ArrayList<>();
languageList.add("Java");
languageList.add("PHP");
languageList.add("Python");
上面这种方式是我们平时使用比较多的一种方式,这种方式并没有什么好说的,后面的泛型操作是在JDK1.7之后就可以不用写了,Java8 之后就可以通过前面的类型进行推断了。
2、Arrays 工具类
List<String> jdks = Arrays.asList("JDK1","JDK2","JDK8");
注意,上面的 asList 是 Arrays 的静态方法,这里使用了静态导入。这种方式添加的是不可变的 List, 即不能添加、删除等操作,需要警惕。。
import static java.util.Arrays.asList;
如果要可变,那就使用 ArrayList 再包装一下,如下面所示。
List<String> numbers = new ArrayList<>(Arrays.asList("1", "2", "3"));
numbers.add("4");
System.out.println(numbers);
包装一下,这就是可变的 ArrayList 了。
3、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 的工具类,没有默认容量,节省空间,但不知道实际工作中有什么鸟用。
4、匿名内部类
List<String> names = new ArrayList<>() {{
add("Tom");
add("Sally");
add("John");
}};
System.out.println(names);
这种使用了匿名内部类的方式,一气呵成,是不是很高大上?
5、JDK8 Stream
import static java.util.stream.Collectors.toList;
List<String> colors = Stream.of("blue", "red", "yellow").collect(toList());
System.out.println(colors);
Stream 是 JDK 8 推出来的新概念,比集合还要更强大,还可以和集合互相转换。
6、JDK 9 List.of
List<String> cups = List.of("A", "B", "C");
System.out.println(cups);
这是 JDK 9 里面新增的 List 接口里面的静态方法,同样也是不可变的。
猜你喜欢
- 2025-01-13 Java 中 List 分片的 5 种方法
- 2025-01-13 你见过哪些实用到爆的 Java 代码技巧?
- 2025-01-13 手把手教你搭建一个基于Java的分布式爬虫系统「转」
- 2025-01-13 List的扩容机制,你真的明白吗?
- 2025-01-13 C# 基础知识系列- 3 集合数组
- 2025-01-13 去除 List 中的重复元素,你知道几种实现方法?
- 2025-01-13 C#中的List可以存储哪些类型的数据?
- 2025-01-13 java8对List集合根据某一字段进行分组
- 2025-01-13 PCHMI5.5二次开发文档(更新)
- 2025-01-13 Qt QString字符串分割、截取的3种方法
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)