Java 为什么没有ArrayList(T[]T)构造函数?

Java 为什么没有ArrayList(T[]T)构造函数?,java,collections,arraylist,Java,Collections,Arraylist,按对象数组初始化列表的方式非常常见: Foo[] objs = ...; ArrayList<Foo> list = new ArrayList<Foo>(Arrays.asList(objs)); Foo[]objs=。。。; ArrayList list=新的ArrayList(Arrays.asList(objs)); 我想知道,为什么ArrayList的设计人员没有包含以array为参数的构造函数,这样就可以像这样初始化它了 ArrayList<Foo&

按对象数组初始化列表的方式非常常见:

Foo[] objs = ...;
ArrayList<Foo> list = new ArrayList<Foo>(Arrays.asList(objs));
Foo[]objs=。。。;
ArrayList list=新的ArrayList(Arrays.asList(objs));
我想知道,为什么ArrayList的设计人员没有包含以array为参数的构造函数,这样就可以像这样初始化它了

ArrayList<Foo> list = new ArrayList<Foo>(objs);
ArrayList list=新的ArrayList(objs);

可能是它违反了某些原则、线程安全或其他什么?

我不知道为什么它不在标准库中,但的类有
newArrayList
,它甚至有助于类型推断:

ArrayList<Foo> list = Lists.newArrayList(objs);
ArrayList list=Lists.newArrayList(objs);

(如果经常使用,您可能需要静态导入
列表。newArrayList

您可以使用Google Guava Library(也称Google Collections)来实现以下目的:

String[] ary = {"a", "b"};
List<String> l = Lists.newArrayList(ary);
String[]ari={“a”,“b”};
List l=Lists.newArrayList(ary);

看来,ArrayList本身没有实现任何构造函数,只是将调用委托给了超类构造函数,即AbstractList的构造函数。包括LinkedList在内的许多列表实现都不应该有接受数组的构造函数

我认为,缺少接受数组的构造函数和类数组中存在静态实用程序方法是良好设计和更好代码重用的一个例子。没错,这会导致我们编写更详细的代码,但这是代价


顺便说一句,如果您使用的是静态
import java.util.Arrays
,那么您可以调用
asList()
,而不提及数组,这样代码就不会太冗长。

java.util.Arrays
内部使用自己版本的
ArrayList

private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable
{
 ...
}
私有静态类ArrayList扩展了AbstractList实现了RandomAccess,java.io.Serializable
{
...
}

不知道为什么它不包括在标准构造函数调用中。。。但是您可以遵循
java.util.Arrays
的指导,拥有自己的Arraylist版本。

我无法告诉您有多少次我在Arraylist上做了大量工作,并且想知道为什么这一看似显而易见的功能不属于
Arraylist