一:数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。
二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。
三:数组是一种可读/可写数据结构没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方 只读方式来使用集合。该方法将返回一个集合的只读版本。
ps:数组和集合还有一个区别,数组是协变类型,集合不是协变类型。
比如说:
Person[] arr = new Employee[5];//Emplyee和Student都是Person子类
arr[0] = new Student();//这里arr[0]实际上是一个Employee引用,但是Student不是Employee类型
这么做,不会报错,因为不存在类型转换。避免这种问题最简单的方法是指定这些数组不是类型兼容的,可是在java确是兼容的。
public double totalArea(Shape[] arr){
double total = 0;
for(Shape s: arr){
if(s != null)
total +=s.area();
}
return total;
}
public double totalArea(Collection<Shape> arr){
double total = 0;
for(Shape s: arr){
if(s != null)
total +=s.area();
}
return total;
}
这俩个方法第一个不会报错,第二个会抛出一个异常:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method totalArea(Collection<Shape>) in the type Test is not applicable for the arguments (Collection<Square>)
证明集合不是协变类型。
|
|