Java arraylist和List之间的差异
使用数组列表和列表之间的区别是什么。实际上,当我想用istself实例化列表时,Java抛出了一个异常,事实上我必须用ArrayList来实现它。List是一个接口,ArrayList是一个实现List的类。不能实例化接口。列表是一种称为接口的通用对象类型。列表有多种类型,包括但不限于ArrayList和LinkedList。列表接口提供了一组方法的句柄,这些方法是在不知道列表类型的情况下操作列表所需的。任何类型的列表都可以指定给列表类型的变量。但列表本身无法实例化,因为它只是一个接口,而不是一个实现。有关更多信息,请参阅Java列表教程Java arraylist和List之间的差异,java,arraylist,Java,Arraylist,使用数组列表和列表之间的区别是什么。实际上,当我想用istself实例化列表时,Java抛出了一个异常,事实上我必须用ArrayList来实现它。List是一个接口,ArrayList是一个实现List的类。不能实例化接口。列表是一种称为接口的通用对象类型。列表有多种类型,包括但不限于ArrayList和LinkedList。列表接口提供了一组方法的句柄,这些方法是在不知道列表类型的情况下操作列表所需的。任何类型的列表都可以指定给列表类型的变量。但列表本身无法实例化,因为它只是一个接口,而不是一
列表
是一种抽象类型—java接口
。接口定义在实现列表的对象上可以找到哪些方法
ArrayList
是List
接口的具体实现(它在内部使用数组存储元素,因此得名)
数组列表
是一个列表
,但列表
不一定是一个数组列表
。还有其他实现,例如LinkedList
请参见您的代码会引发异常,因为列表
是抽象的,您无法实例化抽象的内容
列表是一个界面。在这里,您可以定义此类型的行为签名
ArrayList是一个列表,因为实现了List
,ArrayList是一个具体的实现,所以所有方法都由List接口定义
在Java中,显然可以实例化一个接口,生成匿名类
,但实际上有一个具体的类,它实现了列表
无名称的契约(这就是匿名名称的原因)
这里有一个例子
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替换原理xD@nachokk事实上,这是一个很好的链接,只需输入一个答案,就可以给人一种百科全书式的权威感:)