Главная » Java » Класс ArrayList

1

Пакет   java.util содержит   классы,  которые   весьма   удобно использовать в случае,  если программе требуется хранить несколько экземпляров  (коллекцию)  неких объектов в памяти.  Вот некоторые из популярных  классов коллекций:  ArrayList,  HashTable,  HashMap и List. Я покажу вам, как использовать класс java.util.ArrayList.Недостатком обычного массива является то,  что вам заранее нужно знать  число  элементов  в  массиве.  Помните,  чтобы  создать  экземпляр массива, нужно указать число между квадратными скобками:

String[] myFriends = new String[5];

Класс  ArrayList  не  имеет  такого  ограничения  — можно  создать экземпляр этой коллекции, не зная о том, сколько объектов будет в нем. Просто добавляйте столько элементов, сколько требуется.

Зачем  тогда использовать массивы? Давайте всегда использовать класс ArrayList!  К   сожалению,  бесплатный  сыр  бывает  только  в мышеловке. За   удобство   нужно   заплатить  — ArrayList работает несколько медленнее, чем обычный массив. Кроме того, в нем можно хранить только объекты, но нельзя просто так сохранить набор чисел с типом int  (их  нужно  заворачивать  в  классы-­?обертки   или пользоваться так называемым автобокхингом -­? autoboxing).

Чтобы  создать   и   заполнить   объект   ArrayList, сначала нужно создать  его  экземпляр. Далее  создать  экземпляры  объектов, которые планируете в нем хранить и добавить их в ArrayList, с помощью его метода  add(). Ниже  представлена  небольшая  программа,  которая заполнит  объект  ArrayList объектами  с  типом  String и  выведет содержимое получившейся коллекции.

import java.util.ArrayList;

public class ArrayListDemo {

public static void main(String[] args) {

// Создаем и заполняем ArrayList ArrayList friends = new ArrayList(); friends.add("Елена"); friends.add("Анна"); friends.add("Николай"); friends.add("Сергей");

// Сколько в нем друзей?

int friendsCount = friends.size();

// Печатаем содержимое ArrayList

for (int i=0; i<friendsCount; i++){

System.out.println("Друг №" + i + " это "+friends.get(i));

}

}

}

Эта  программа напечатает следующие строки:

Друг №0 это Елена Друг №1 это Анна Друг №2 это Николай Друг №3 это Сергей

Метод  get()извлекает  из  объекта  ArrayList  элемент, который располагается  по указанному индексу.  Так  как  вы  можете хранить в коллекции любые объекты, метод get() возвращает каждый элемент с типом  Object.  Ответственность   за   приведение   этого   объекта   к правильному типу данных ложится на программу. Мы не обязаны были делать  это  в  предыдущем  примере  только  потому,  что хранили  в коллекции friends объекты с типом String.

Java автоматически выполняет преобразование объекта с типом Object  в  объект  с  типом  String.  Но,  если  вы решите  хранить  в ArrayList  другие   объекты,  например,  экземпляры  класса   Fish, правильный  код  для  добавления  и  извлечения  конкретных  объектов Fish может выглядеть так,  как  в программе FishTank,  которая приводится далее.

Сначала эта программа создает несколько экземпляров класса Fish, назначает некое значение цвету, весу и текущей глубине погружения и сохраняет эти значения  в  объект  ArrayList  с именем  fishTank. Затем программа получает объекты  из  коллекции,  приводит их тип к типу Fish и  печатает значения этих объектов.

import java.util.ArrayList;

public class FishTank {

public static void main(String[] args) { ArrayList fishTank = new ArrayList();

Fish theFish;

Fish aFish = new Fish(20); aFish.color = "красную"; aFish.weight = 2;

fishTank.add(aFish);

aFish =  new Fish(10); aFish.color = "зеленую"; aFish.weight = 5; fishTank.add(aFish);

int fishCount = fishTank.size();

for (int i=0;i<fishCount; i++){

theFish = (Fish) fishTank.get(i);

System.out.println("Поймал "+ theFish.color +

" рыбу с весом " + theFish.weight + " кг. Глубина:"

+ theFish.currentDepth);

}

}

}

Ниже  приводятся выходные данные программы FishTank:

Поймал красную рыбу с весом 2.0 кг. Глубина:20

Поймал зеленую рыбу с весом 5.0 кг. Глубина:10

Теперь, когда  вы  прочитали  об  уровнях  доступа  в  языке  Java, можно немного  изменить  классы Pet  и  Fish.  Такие  переменные  как age, color, weight и height можно  объявлять с модификатором доступа protected, если вы думаете, что кто-­?то захочет наследовать свои классы из  них.  А  переменная currentDepth  должна  быть  private. Также нужно  добавить  новые  public  методы, например, getAge(), чтобы возвращать   значение переменной age,  и метод  setAge(), чтобы устанавливать значение этой переменной.  

Программисты с  хорошими  манерами  не  разрешают  одному  классу напрямую  изменять   свойства   другого   класса.  Класс должен предоставлять  методы, которые  бы  изменяли  его  внутренние элементы.  Вот  почему  класс  Score из  предыдущего  раздела  был спроектирован   с  private переменными, которые  могли  быть получены или  изменены только  с  помощью  специальных  getter-­?  и setter-­?методов для чтения и записи соответственно.

В  этой главе я показал вам различные элементы и приемы в языке Java, которые,  на  первый  взгляд,  кажутся  несвязанными  друг  с  другом. Однако    все    эти    элементы  очень    часто    используются профессиональными программистами  на  Java.   После  выполнения практических упражнений к этой главе, вы будете лучше понимать как эти элементы работают вместе. Материалы для дополнительного чтения

1.  Коллекции Java:

http://download.oracle.com/javase/tutorial/col lections/intro/index.html

2.  :

http://download.oracle.com/javase/7/docs/api

/java/util/ArrayList.html

3.  Работа с датами:

http://www.vogella.de/articles/JavaDateTimeA PI/article.html

4.  Класс Calendar:

http://download.oracle.com/javase/7/docs/api

/java/util/Calendar.html

 Практические упражнения

1.  Добавьте  перегруженный конструктор по  умолчанию (без  аргументов) в  класс  Fish. Этот   конструктор  должен  устанавливать  значение   стартовой   позиции   равное10  метрам.   Класс  FishMaster  будет создавать  экземпляр  объекта  Fish оченьпросто, вот так:

Fish myFish = new Fish();

2. Добавьте  в  класс  Score конструктор  с  четырьмя  аргументами.  Создайте программу  ScoreWriter3,   которая  будет  заполнять  экземпляры  класса Score не  с помощью setter-­?методов,  а в момент создания объекта, например так: Score aScore =  new  Score("Николай",

"Смирнов", 250, today);

Практические упражнения для умников и умниц

Погуглите  как использовать класс HashMap. Попробуйте создать программу HashMapDemo, которая похожа на программу ArrayListDemo, но  в коллекции хранятся имена и телефоны.

Источник: Java  Programming for Kids, Parents and Grandparents by Yakov Fain

По теме:

  • Комментарии

1 комментарий

  1. coyicabuto says:

    Mozno skachatz code? Spasibo.