数组足够时使用Java列表
如果您事先知道列表的大小,并且还可以在其中使用数组,那么建议使用Java集合列表吗?是否存在性能缺陷数组足够时使用Java列表,java,arrays,list,collections,Java,Arrays,List,Collections,如果您事先知道列表的大小,并且还可以在其中使用数组,那么建议使用Java集合列表吗?是否存在性能缺陷 列表是否可以像数组一样在单个语句中使用元素进行初始化(所有元素的列表用逗号分隔)?集合/列表更灵活,提供了更多实用方法。对于大多数情况,任何性能开销都可以忽略不计 对于此单语句初始化,请使用: Arrays.asList(yourArray); 发件人: 返回指定数组支持的固定大小列表。(对返回列表的更改“直写”到数组。)此方法与collection.toArray相结合,充当基于数组和基于集
列表是否可以像数组一样在单个语句中使用元素进行初始化(所有元素的列表用逗号分隔)?集合/列表更灵活,提供了更多实用方法。对于大多数情况,任何性能开销都可以忽略不计 对于此单语句初始化,请使用:
Arrays.asList(yourArray);
发件人:
返回指定数组支持的固定大小列表。(对返回列表的更改“直写”到数组。)此方法与collection.toArray相结合,充当基于数组和基于集合的API之间的桥梁。返回的列表可序列化并实现随机访问
我的猜测是,这是转换为列表的最明智的方式,但我可能错了
如果您事先知道列表的大小,并且还可以在那里使用数组,那么建议使用Java集合列表吗?性能缺陷???
如果一个数组足够,那么就使用一个数组。只是为了保持简单。您甚至可以从中获得稍微好一点的性能。记住,如果你
- 是否需要将结果数组传递给接受
集合的方法,或者
- 如果您需要使用
-方法,如列表
、.contains
,或其他方法,或.lastIndexOf
- 如果需要使用
方法,如集合
反向
集合
/列表
类
如何在单个语句中使用元素初始化列表,如数组={所有元素的列表以逗号分隔}?
你能行
List<String> list = Arrays.asList("foo", "bar");
List List=Arrays.asList(“foo”、“bar”);
或
List arrayList=新的arrayList(Arrays.asList(“foo”,“bar”));
或
List List=newarraylist(){{add(“foo”);add(“bar”);};
建议使用Java吗
当您
事先知道清单的大小
你也可以在那里使用数组?
性能缺陷
使用列表而不是数组是完全可以接受的,即使您事先知道大小
如何使用初始化列表
单个语句中的元素,如
数组={所有元素的列表
用逗号分隔}
请参见Arrays.asList()
1)集合是最基本的类型,仅表示存在对象集合。如果没有顺序或重复使用java.util.Set
,如果有可能的重复和顺序使用java.util.List
,是否有顺序但没有重复使用java.util.SortedSet
2) 用花括号实例化一个数组,Arrays.asList()加上类型推断的泛型
List<String> myStrings = Arrays.asList(new String[]{"one", "two", "three"});
List myStrings=Arrays.asList(新字符串[]{“一”、“二”、“三”});
还有一个使用匿名类型的技巧,但就我个人而言,我不太喜欢:
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");
}};
List myStrings=new ArrayList(){
//这是匿名类的内部
{
//这是匿名类中实例块的内部
本条。添加(“一”);
本条。添加(“两”);
本条添加(“三”);
}};
是的,建议这样做
一些不同的列表构造函数(如ArrayList)甚至采用参数,这样您就可以“预分配”足够的备份存储,从而在添加元素时减少列表“增长”到适当大小的需要
如果您事先知道列表的大小,并且还可以在其中使用数组,那么建议使用Java集合列表吗
在某些(可能是大多数)情况下是的,无论如何使用集合是绝对可取的,在某些情况下是不可取的
在赞成方面:
- 如果使用列表而不是数组,则代码可以使用诸如
、包含
、插入
等方法删除
- 许多库类都需要集合类型的参数
- 您不必担心下一版本的代码可能需要一个更具动态性的数组。。。这将使最初基于数组的方法成为一种负担
- 集合的速度稍慢,如果数组的基类型是基类型,则更慢李>
- 集合确实占用更多内存,特别是当数组的基类型是基元类型时李>
在实践中,在确定阵列的大小时,通常会降低性能和/或代码复杂性。(假设您使用了一个
char[]
来保存一个系列的串联。您可以计算出数组需要有多大;例如,通过将组件字符串大小相加。但是它很混乱!)需要考虑不同的事情:数组的类型已知吗?谁访问阵列?
阵列存在几个问题,例如:
- 不能创建泛型数组
- 数组是协变的:如果A扩展了B->A[]扩展了B[],这可能会导致ArrayStoreException
- 不能使数组的字段不可变
Arrays.asList():在JSE中没有集合.asList(String…,但现在我看到
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");
}};