使用Array List和List有什么区别。实际上,当我想用自己实例化List时,Java会抛出异常,实际上我必须使用ArrayList来实现它。
答案 0 :(得分:1)
List
是一个抽象类型 - 一个java interface
。接口定义了在实现List
的对象上可以找到哪些方法。
ArrayList
是List
接口的具体实现(在内部使用数组来存储元素,因此名称)。
ArrayList
是List
,但List
不是必然 ArrayList
。还有其他实现,例如LinkedList
。
答案 1 :(得分:0)
列表是一个界面, ArrayList 是一个实现列表的类。您无法实例化接口。
答案 2 :(得分:0)
List是一种通用类型的对象,称为接口。有许多类型的列表,包括但不限于ArrayList和LinkedList。 list接口提供了操作列表所需的一组方法的句柄,而不知道它是什么类型的列表。可以将任何类型的列表分配给List类型的变量。但是列表本身无法实例化,因为它只是一个接口而不是一个实现。有关更多信息,请参阅Java列表教程。 http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html
答案 3 :(得分:0)
您的代码抛出异常原因List
是抽象的,您无法实例化抽象的东西。
列表是一个界面。在这里,您可以定义合同此类型的行为签名。
ArrayList是一个List,因为implements List
, ArrayList是一个具体的实现,所以然后让List接口定义所有方法。
在Java中,您显然可以实例化一个创建anonymous classes
的接口,但是您确实有一个具体的类,它使用无名称实现List
契约(这就是匿名的原因)。
这是一个例子
List list = new List(){
@Override
public boolean add(Object arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public void add(int arg0, Object arg1) {
// TODO Auto-generated method stub
}
@Override
public boolean addAll(Collection arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean addAll(int arg0, Collection arg1) {
// TODO Auto-generated method stub
return false;
}
@Override
public void clear() {
// TODO Auto-generated method stub
}
@Override
public boolean contains(Object arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean containsAll(Collection arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public Object get(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int indexOf(Object arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public Iterator iterator() {
// TODO Auto-generated method stub
return null;
}
@Override
public int lastIndexOf(Object arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public ListIterator listIterator() {
// TODO Auto-generated method stub
return null;
}
@Override
public ListIterator listIterator(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean remove(Object arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public Object remove(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean removeAll(Collection arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean retainAll(Collection arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public Object set(int arg0, Object arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
@Override
public List subList(int arg0, int arg1) {
// TODO Auto-generated method stub
return null;
}
@Override
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
@Override
public Object[] toArray(Object[] arg0) {
// TODO Auto-generated method stub
return null;
}
};
正如@Bohemian所说,如果你自己创建列表,你必须要关注Liskov Substitution Principle,不要打破这个并遵循合同。