2014-05-19 2 views
-1
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?ArrayList toArray() преобразование не позволяет использовать lenth()?

Во-вторых, почему я не могу выводить элементы ArrayList с помощью цикла for?

for (int i=0; i<al.length(); i++) 
     { 
      System.out.println("Contents are :"+ al[i]); 
     } 

(здесь с помощью al.length(), а также аль [I] дает ошибку)

+0

'length' - это общедоступное поле для массивов. Метод 'length()' не существует. – awksp

+0

Вы также не можете получить доступ к элементам ArrayList, используя нотацию массива. массивы! = 'ArrayList' – awksp

ответ

6

Во-первых, массивы имеют length поле, которое final и int типа. Массивы не имеют метода length.

Это отмечено в Java Language Specification. Chapter 10. Arrays. (курсив мой):

10,2. Переменные массива

После создания объекта массива его длина никогда не изменяется. Чтобы переменная массива ссылалась на массив разной длины, ссылка на другой массив должна быть назначена переменной.

10.3. Создание массива

Выражение создания массива указывает тип элемента, количество уровней вложенных массивов, и длину массива для хотя бы одного из уровней вложенности. Длина массива доступна как переменная экземпляра finallength.

Для доступа к элементам массива, используйте [index]:

System.out.println(a[index]); 

Во-вторых, ArrayList не имеет length метод, но size.

Для того, чтобы получить доступ к элементам в ArrayList по Inde, использовать 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); 
} 
0

Массивы имеют поле имени length.

В списках имеется метод по названию size().

Для доступа к третьему элементу массива вы используете это: someArray[2]

Для доступа к третьему элементу списка, можно использовать это: someList.get(2)

Резюмируя: списки и массивы очень разные.

Пожалуйста, ознакомьтесь с documentation for the List interface (который реализует ArrayList), где вы можете узнать все, что вам нужно знать о списках и их методах.

0

Если вам интересно, почему это метод, а другое поле: размер массива определяется, когда он создан, поэтому поле final, то есть одно, которое нельзя изменить, безопасно быть сделанным public и доступ к ним пользователей. С другой стороны, размеры коллекций могут измениться. Классы, которые реализуют Collection или List, также имеют поле размера, но это поле не может быть final. Таким образом, это должно быть сделано private, и для обеспечения инкапсуляции должен использоваться метод геттера. В противном случае любой может просто сделать что-то вроде myArrayList.size = -5; и сломать реализацию.

Смежные вопросы