尝试使用以下代码:
List<Integer> list = new List<Integer>();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
java.util.List是抽象的; 无法实例化
这是什么意思,为什么我不能List以同样的方式初始化ArrayList?
Eti*_*tel 174
在Java中,List是一个接口.也就是说,它无法直接实例化.
相反,您可以使用ArrayList哪个接口的实现,该接口使用数组作为其后备存储(因此名称).
既然ArrayList 是一种List,你可以轻松地将它改为:
List<T> mylist = new ArrayList<T>();
Run Code Online (Sandbox Code Playgroud)
这与.NET形成对比,从版本2.0开始,它List<T>是IList<T>接口的默认实现.
Mic*_*rry 11
List是接口,而不是类,因此无法实例化.ArrayList很可能是你想要的:
ArrayList<Integer> list = new ArrayList<Integer>();
Java中的接口实质上定义了类的蓝图 - 实现接口的类必须提供列表定义的方法的实现.但ArrayList在这种情况下,实际的实现完全取决于实现类.
JDK还提供了LinkedList- 一种替代实现,它再次符合列表界面.它与ArrayList底层的工作方式非常不同,因此在列表中间添加/删除项目时效率更高,但对于绝大多数用例而言效率较低.当然,如果你想定义自己的实现,它是完全可能的!
简而言之,你不能创建一个列表,因为它是一个不包含具体代码的接口 - 这是实现该列表的类的工作,其中ArrayList迄今为止使用最多(并且有充分的理由!)
值得注意的是,在C#中,a List是一个类,而不是一个接口 - 就是这样IList.同样的原则也适用,只是名称不同.