ArrayList toArray()转换不允许你使用length()?

时间:2014-05-19 03:59:40

标签: java collections arraylist

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]给出错误)

3 个答案:

答案 0 :(得分:6)

首先,数组的length字段为finalint类型。数组没有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 不是数组,它是一个使用数组作为容器的类来保存它将存储的元素并将添加如果需要容纳更多元素,则删除,搜索并创建一个新数组。

要浏览数组的所有元素或ListArrayList实现的接口),最好使用增强的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并由该类用户访问。另一方面,收藏品的大小可以改变。实现CollectionList的类也有一个大小字段,但此字段不能为final。因此必须使它private并且必须使用getter方法来强制执行封装。否则,任何人都可以像myArrayList.size = -5;这样做,并打破执行。