import java.util.*;
class Ball{
public static void main(String args[])
{
ArrayList al = new ArrayList();
al.add(new Integer(1));
al.add(new Integer(2));
al.add(new Integer(3));
Object a[]= al.toArray();
for (int i=0; i<a.length; i++)
{
System.out.println("Contents are :"+ a[i]);
}
}}
所以我创建了一个ArrayList并添加了几个元素。然后用toArray方法得到对象数组a。但是,如果我使用i<a.length()
代替i<a.length
,则会收到错误消息。我不明白的是,如果length()
是一种方法,那么length
是什么?
其次,为什么我不能使用for循环输出ArrayList元素?
for (int i=0; i<al.length(); i++)
{
System.out.println("Contents are :"+ al[i]);
}
(在这里使用al.length()以及al [i]给出错误)
答案 0 :(得分:6)
首先,数组的length
字段为final
和int
类型。数组没有length
方法。
这在Java Language Specification. Chapter 10. Arrays.中强调(强调我的):
10.2。数组变量
创建数组对象后,其长度永远不会改变。要使数组变量引用不同长度的数组,必须为变量分配对不同数组的引用。
10.3。数组创建
数组创建表达式指定元素类型,嵌套数组的级别数,以及至少一个嵌套级别的数组长度。数组的长度以
final
实例变量length
提供。
要访问数组的元素,请使用[index]
:
System.out.println(a[index]);
其次,ArrayList
没有length
方法,只有size
。
要通过inde访问ArrayList
的元素,请使用get
方法:
System.out.println(al.get(index));
请注意,ArrayList
不是数组,它是一个使用数组作为容器的类来保存它将存储的元素并将添加如果需要容纳更多元素,则删除,搜索并创建一个新数组。
要浏览数组的所有元素或List
(ArrayList
实现的接口),最好使用增强的for
循环:
for (Object o : a) {
System.out.println(o);
}
for (Object o : al) {
System.out.println(o);
}
答案 1 :(得分:0)
数组有一个名为length
的字段。
列表中有一个名为size()
的方法。
要访问数组的第三个元素,请使用:someArray[2]
要访问List的第三个元素,请使用:someList.get(2)
总结:列表和数组非常不同。
请考虑阅读documentation for the List interface(ArrayList实现的内容),在那里您可以了解有关列表及其方法的所有信息。
答案 2 :(得分:0)
如果您想知道为什么一个是方法而另一个是字段:数组的大小是在创建时确定的,因此final
字段(即无法更改的字段)是安全的成为public
并由该类用户访问。另一方面,收藏品的大小可以改变。实现Collection
或List
的类也有一个大小字段,但此字段不能为final
。因此必须使它private
并且必须使用getter方法来强制执行封装。否则,任何人都可以像myArrayList.size = -5;
这样做,并打破执行。