在您事先知道列表大小并且还可以在那里使用数组的情况下,建议使用Java Collections List吗?有任何性能缺陷吗?
是否可以使用单个语句中的元素(如数组)(用逗号分隔的所有元素的列表)初始化列表?
答案 0 :(得分:4)
集合/列表更灵活,并提供更多实用方法。在大多数情况下,任何性能开销都可以忽略不计。
对于这个单语句初始化,请使用:
Arrays.asList(yourArray);
来自the docs:
返回由指定数组支持的固定大小的列表。 (对返回列表的更改“直写”到数组。)此方法与Collection.toArray结合,充当基于数组的API和基于集合的API之间的桥梁。返回的列表是可序列化的,并实现RandomAccess。
我的猜测是,这是转换为列表的最佳性能方式,但我可能错了。
答案 1 :(得分:4)
在您事先知道列表大小并且还可以在那里使用数组的情况下,建议使用Java Collections List吗?
在某些(可能是大多数)情况下,无论如何都绝对建议使用收藏品,在某些情况下这是不可取的。
赞成方:
contains
,insert
,remove
等方法。另一方面:
但是,性能很少是一个关键问题,在许多情况下,性能差异与大局无关。
实际上,在计算数组大小应该是什么时,性能和/或代码复杂性通常会有成本。 (考虑一下您使用char[]
来保存系列串联的假设情况。可以计算出数组需要多大的数据;例如,通过将组件字符串大小相加。但它很乱!)
答案 2 :(得分:2)
在您事先知道列表大小并且还可以在那里使用数组的情况下,建议使用Java Collections List吗?性能缺陷???
如果数组足够,则使用数组。只是为了让事情变得简单。你甚至可以获得更好的性能。请记住,如果你...
Collection
或List
- .contains
,.lastIndexOf
或其他方法,或Collections
方法,例如reverse
... 然后可以从一开始就选择Collection
/ List
类。
如何使用单个语句中的元素初始化列表,例如array = {以逗号分隔的所有元素的列表}?
你可以做到
List<String> list = Arrays.asList("foo", "bar");
或
List<String> arrayList = new ArrayList<String>(Arrays.asList("foo", "bar"));
或
List<String> list = new ArrayList<String>() {{ add("foo"); add("bar"); }};
答案 3 :(得分:2)
1)Collection
是最基本的类型,只暗示有一组对象。如果没有订单或重复使用java.util.Set
,如果有可能重复并使用java.util.List
订购,是否有订单但没有重复使用java.util.SortedSet
2)实例化数组的Curly括号,Arrays.asList()加上类型推断的泛型
List<String> myStrings = Arrays.asList(new String[]{"one", "two", "three"});
还有一个使用匿名类型的技巧,但我个人并不是一个大粉丝:
List<String> myStrings = new ArrayList<String>(){
// this is the inside of an anonymouse class
{
// this is the inside of an instance block in the anonymous class
this.add("one");
this.add("two");
this.add("three");
}};
答案 4 :(得分:2)
是的,这是可取的。
一些不同的列表构造函数(如ArrayList)甚至采用参数,因此您可以“预分配”足够的后备存储,从而减少了在添加元素时列表“增长”到适当大小的需要。
答案 5 :(得分:2)
需要考虑不同的事情:数组的类型是否已知?谁访问阵列? 数组有几个问题,例如:
另请参阅有效Java书的第25项“首选列表到数组”。
也就是说,有时阵列很方便,例如新的Object ...参数语法。
如何使用单个语句中的元素初始化列表,例如array = {以逗号分隔的所有元素的列表}?
Arrays.asList():http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList%28T...%29
答案 6 :(得分:1)
使用Java是否可取 收藏列表中的情况 事先了解清单的大小 你还可以在那里使用数组? 性能缺点?
使用List而不是数组是完全可以接受的,即使您事先知道了大小。
如何使用初始化列表 单个语句中的元素就像一个 array = {所有元素的列表 用逗号分隔}?
请参阅Arrays.asList()
。