在LinkedIn考试考到了,很遗憾没考过,特意记录一下,下次再战!
文章不是我写的,看到别人的总结,发在我这里自己看看

在 Java 中几种初始化 List 的方法:

1.

List<String> stringList = new LinkedList<>();
stringList.add("a");
stringList.add("b");
stringList.add("c");

  这种方式简单粗暴好理解,比较花费代码行数,而且是各个JDK都支持的通用做法

2.

List<String> stringList = new LinkedList<String>(){{
add("a");
add("b");
add("c");
}};

  这里定义了一个匿名的内部类,并使用 add 来初始化,虽然可以写为一行(这里并不是很重要),匿名内部类有一些效率损失,其次,如果需要把类返回给外部使用,可能产生内存泄漏。

3.

List<String> stringList = Arrays.asList("a", "b", "c");

  这里使用了 asList 的静态方法,2中提到的两个风险都能避免,但同2一样,不支持删减,这点要注意。

另外:

  • Arrays.asList 的参数如果是基本类型的数组时,需要留意返回值可能和你预期的不同。

int[] intArray = new int[]{1, 2, 3};
Integer[] integerArray = new Integer[]{1, 2, 3};
List<int[] > intArrayList = Arrays.asList(intArray);
List<Integer> integerList = Arrays.asList(integerArray);
List<Integer> integerList2 = Arrays.asList(1, 2, 3);

  也就是说,Arrays.asList(intArray) 返回的是 List<int> 不是 List<Integer>, 尽量使用包装类,避免使用底层数据结构。PS, {{}} 双括号语法同样可用于初始化 Map 等其他众多类型

4.

List<String> list = Stream.of("a", "b", "c").collect(Collectors.toList());

  这是 JDK8以后支持的方式,流式初始化,可以用流式处理的方法有很多,这里有点大材小用。

5.

List<String> list = Lists.newArrayList("a", "b", "c");

  这是 JDK9的初始化方式

List的初始化方式的更多相关文章

  1. C基础--结构体成员初始化方式

    之前在linux内核代码中看到结构体成员成员初始化使用类似于.owner = THIS_MODULE, 不太见过,于是搜了个博客,分享下: 转自:http://www.cnblogs.com/Anke ...

  2. HashMap优雅的初始化方式以及引申

    小记 相信很多人和笔者一样,经常会做一些数组的初始化工作,也肯定会经常用到集合类.假如我现在要初始化一个String类型的数组,可以很方便的使用如下代码: String [] strs = {&quo ...

  3. Java中final变量的初始化方式

    原文转自:http://blog.csdn.net/zhangjk1993/article/details/24196847 public class FinalTest1 { //--------- ...

  4. c语言数组不同初始化方式的结果

    第一种初始化方式: #include <stdio.h> int main() { int numbers[5]={12,14}; for (int i=0; i<5; i++) { ...

  5. Java中数组的初始化方式

    Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组 ...

  6. C++的各种初始化方式

    C++小实验测试:下面程序中main函数里a.a和b.b的输出值是多少? #include <iostream> struct foo { foo() = default; int a; ...

  7. C++ vector初始化方式

    C++的初始化方法很多,各种初始化方法有一些不同. (1): vector<int> ilist1; 默认初始化,vector为空, size为0,表明容器中没有元素,而且 capacit ...

  8. TensorFlow使用记录 (五): 激活函数和初始化方式

    In general ELU > leaky ReLU(and its variants) > ReLU > tanh > logistic. If you care a lo ...

  9. 【Java编程思想读书笔记】继承中父类的初始化方式

    继承中父类的初始化方式 p144页有感 一.提出问题 假设有一些类,这些类有继承关系的时候,当初始化一个子类对象,对于该类的父类而言,发生了什么呢?是仅仅只是复制了一个引用还是也会同时new一个父类对 ...

  10. Java连载66-数组的两种初始化方式

    一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就 ...

随机推荐

  1. centos上安装python3.6环境和 pip3

    本篇使用的方法,在不删除Python2的版本,使得Python3和Python2共存 1.yum 安装依赖命令: yum -y install zlib-devel bzip2-devel opens ...

  2. iOS 过滤字符串

    //表示去掉字符串中的/符号 sysdate:[[self Gettime:strbegindate] stringByReplacingOccurrencesOfString:@"/&qu ...

  3. DRF的安装和基本增删查改的简单使用

    1.app注册 2.建表 3.创建ser.py(重点) 4.views.py代码(重点) queryset:指明该视图集在查询数据时使用的查询集 serializer_class:指明该视图在惊醒序列 ...

  4. unity 2D 物体跟随鼠标旋转 移动

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class FollowMo ...

  5. 安装最新版cmake

    pip install cmake --upgradewhich cmakeln -s $(which cmake) /usr/local/bin/cmake

  6. Django Rest Frame work 如何使用serializers序列化

    Django Rest Frame work 如何使用serializers序列化       Django Rest Framework提供了serializers模块,用于序列化和反序列化模型实例 ...

  7. 2019-2020-1 20199318《Linux内核原理与分析》第十三周作业

    <Linux内核原理与分析> 第十三周作业 一.预备知识 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片 ...

  8. Java数组之冒泡排序【重点】

    冒泡排序 冒泡排序是最为出名的排序算法之一,总共有八大排序! 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较. 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2). ...

  9. Java流程控制之DoWhile循环

    DoWhile循环 对于while语句而言,如果不满足条件,则不能进入循环.但有时候我们需要即使不满足条件,也至少执行一次. do...while 循环和 while循环相似,不同的是,do...wh ...

  10. 在vue js中for循环使用

    在线免费图片压缩工具 前端技术站 1.for(let item of response.data.result) { 用item操作每一条数据. } item:定义的每一条的变量 response.d ...