Java中的ArrayList,List和Collection几乎以相同的方式运行,并且它们有许多共同的方法.如果是这样的话,那么它们之间的主要区别是什么?以下简单的代码片段演示了它.
package collections;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
final public class Main
{
public static void main(String[] args)
{
Collection<String> collection=new ArrayList<String>();
List<String>list=new ArrayList<String>();
ArrayList<String>arrayList=new ArrayList<String>();
collection.add("A");
collection.add("B");
list.add("A");
list.add("B");
arrayList.add("A");
arrayList.add("B");
Iterator<String>collectionIterator=collection.iterator();
Iterator<String>listIterator=list.iterator();
Iterator<String>arrayListIterator=arrayList.iterator();
while(collectionIterator.hasNext())
{
System.out.println(collectionIterator.next());
}
while(listIterator.hasNext())
{
System.out.println(listIterator.next());
}
while(arrayListIterator.hasNext())
{
System.out.println(arrayListIterator.next());
}
}
}
Run Code Online (Sandbox Code Playgroud)
何时何地使用ArrayList,Collection和List?在哪些特定情况下,它们之间的差异可能是显着的?
Dav*_*ton 10
A Collection是定义最高级别的共享集合行为的接口,并且是扩展Iterable(仅定义iterator()方法).
A List是定义最高级别共享List行为的接口.
ArrayList是一个实现,List并且通常不会在声明中使用,除非您需要实现保证(例如,快速索引访问),但可以用作列表值.
阅读文档以查看差异 - 他们在API中进行了描述.implementation(ArrayList)将在它实现的每个接口中具有每种方法的特定于类型的实现.
通常,使用提供所需内容的最少特定接口.例如,传递Collection代替List允许更广泛的实现选择.如果你需要索引访问(例如List.get(int)),Collection那就不行了.
与大多数事情一样,使用哪种方式完全取决于您的需求.
对于局部变量,它并不重要.当类型是API的一部分时,即在可能由尚未编写的代码调用的方法签名中,这很重要:
Collection有一个非常简单的契约 - 它基本上只意味着你有一堆元素,你可以添加和删除元素,检查集合是否包含特定元素,并迭代它们.如果这是您的所有代码需求,请使用Collection- 它为使用您API的代码提供了最大的自由.List在其契约中具有的顺序除了通过显式操作之外不会改变,您可以使用get()第n个元素,add()将新元素放在最后,等等.如果您的代码依赖于任何这些属性,你应该使用ListArrayList只是ListAPI 的具体实现,绝不应该在API中使用.它的用法应该只是一个实现细节(除非你有一些非常具体的要求).没有仔细思考的API中使用可能会导致很多无谓的转换和不必要的慢代码的类型,集合之间的转换Collection,Set,List和各种实现类只是为了满足设计很差的API.