以下方法在集合中有什么区别

时间:2013-06-19 07:47:28

标签: collections

方法一:通过引用基类创建子类的对象。 方法二:通过引用同一类创建子类的对象。

List<Point> objOne = new ArrayList<Point>();
ArrayList<Point> objTwo = new ArrayList<Point>();

2 个答案:

答案 0 :(得分:1)

List甚至是一个接口。它更抽象,并且精确定义了API属性,但不是更多。 Java中的实现可能不同:用于批量工作的ArrayList,仅用于一对的LinkedList,节省内存。应隐藏此实施决策。

函数应该在List上运行,而不是在特定的实现上运行,比如ArrayList。如果人们谈论列表而不是ArrayLists,它也会更普遍地制定。所以对于变量我也不会过分指定它们的类型。

在许多(脚本)语言中,如VB,PHP和其他语言,这种区别不存在,并且有一种类型具有一个实现。这简化了他们的语言并且可能对某些人有吸引力,但Java有一个很好的技术方面。

您可以使用不同的实现,使用工厂方法动态选择一个。在单元测试中模拟实现。

答案 1 :(得分:1)

List是一个接口,而ArrayList是一个Class。 因此,假设您的同事编写了一个函数,该函数接收一个点列表并对其进行一些处理。 现在他使用了这样的抽象,这样他的代码就可以在ArrayList和LinkedList上工作。

public void myfunction(List<Point> pointlist){
//do something on the point
}

现在你的第一个对象objOne将使用这个函数,因为它使用了Abstraction。这就是编写好代码的方法。

现在你的第二个对象objTwo不能使用这个函数,所以应该避免使用这种代码。