用Java初始化List的五种方法
由于Java中经常需要用到List,所以下面简单介绍几种常见的初始化方式。
构建List后,用List.add初始化
列表字符串列表=new linked list (;
stringlist.add('a );
stringlist.add('b );
stringlist.add('c ';
这是最常见的做法,使用起来不太方便。
{{}}使用方括号语法
列表字符串列表=新链接列表
add(a );
add(b );
add(c );
};
这种方式比较方便了。
外部{}定义了链接列表的匿名内部类。 内层的{}定义了实例初始化代码块。 此代码块在初始化内部类时执行。 因此,这里相当于定义匿名内部类,并使用add添加和初始化元素。
这种方式有几个缺点:
使用匿名内部类会有效率的损失。 当然,在大多数情况下,这种效率是可以接受的。
静态内部类保存对存在的外部类的引用。 如果需要将List放回其他位置使用,可能会导致内存泄漏。
使用Arrays.asList
liststringlist=arrays.as list (' a '、' b '、' c ' );
该方式使用了java.util.Arrays的静态方法。 写法比以往的两个更简洁,也没有构建匿名内部类的效率问题。
但是,需要注意一些:
Arrays.asList返回Arrays的静态内部类。 静态内部类没有对存在的外部类的引用。
此内部类继承自AbstractList,实现RandomAccess,内部使用数组来存储元素。 但是,不支持添加或删除元素。 对此需要注意。 如果只是使用Arrays.asList初始化常量,这就没问题了。
请注意,如果Arrays.asList参数是基本类型的数组,则返回值可能与预期值不同。
int [ ] intarray=new int [ ] { 1,2,3 };
integer [ ] integer array=new integer [ ] { 1,2,3 };
listintarraylist=arrays.as list (intarray );
listintegerlist=arrays.as list (integer array );
listintegerlist2=arrays.as list (1,2,3 );
其中arrays.asList(Intarray )的返回值是列表而不是列表。 这不是问题,但使用时需要注意。 如果在Java中尽量使用List和Integer,则如果尽量不使用int等基本类型和[]等比较基本的数据结构,就可以避免。
说闲话:
Java毕竟不能说是完全的面向对象。 毕竟,还剩下基本的数据类型。 确实,基本的数据类型比相应的包类型更有效地使用。 但是,应该使用基本类型,应该使用封装类型,应该什么时候使用这个,什么时候使用哪个,在使用中带来了混乱。 Java为用户提供了更多的选择,但给用户带来了难题。 在我看来,与Java相比,c的一个优点是有很多事情受到限制,有更明确更明确的定义,减少了歧义,容易理解。 但是,基本的数据类型在这里,我仍然觉得Java作为改善了c缺点的语言留下了阴影。
虽然本文介绍了初始化列表,但是这里的{}方括号语法也可以用于许多其他类型,如Map初始化。 相比之下,Arrays.asList只能用于初始化列表类型。
4 .使用流(JDK8)
列表=stream.of (a )、b )、c )、collectors.tolist );
使用JDK8的Stream进行了初始化。 简单地初始化List,使用Stream有点大,不好用。
5 .使用列表(JDK9)
listlist=lists.newArraylist('a '、' b '、' c ' );
这和Arrays.asList一样简洁清晰。
参考资料