71
В этом примере используются
generics
, которые мы обсудим позже.
import java.util.ArrayList;
public class Insects{
public static void main (String[] args) {
ArrayList box = new ArrayList();
box.add (”fly");
box.add (”moskito");
box.add (”spider");
System.out.println (box);
int location = box.indexOf (”fly");
box.remove (location);
System.out.println (box);
System.out.println ("At index 1: " + box.get(1));
box.add (2, ”spider");
System.out.println (box);
System.out.println (” quantity in box: " +
box.size());
for(String box : box){
System.out.println(box);
}
if(box.contains(”fly")){
System.out.println(«
В
коллекции
есть
fly");
}
}
}
Эффективность
ArrayList
Класс
ArrayList
реализован с использованием базового массива. Массивом
объектов можно манипулировать, причем индексы
остаются непрерывными при
добавлении или удалении элементов. Если элементы добавляются и удаляются из
конца списка, эта обработка будет довольно эффективной. Но, как только элементы
вставляются и удаляются в начале или в середине списка, то
остальные элементы
сразу же сдвигаются.
Пример реализации коллекции
ArrayList
для хранения объектов разных
типов:
public interface Product {/* ... */}
public class Picture implements Product { /* ... */ }
public class Shoe implements Product { /* ... */ }
public class Book implements Product { /* ... */ }
72
public class Toy implements Product { /* ... */ }
List< Product > products = new ArrayList< Product >();
products.add(new Picture());
products.add(new Shoe());
products.add(new Book());
products.add(new Toy());
Здесь, наверное, логичнее будет использовать абстрактный класс
Product
и
наследоваться от него, чем делать имплементация интерфейса.
Product может
содержать методы общие для всех потомков, а вообще - коллекция более гибкий
инструмент для такого рода данных, чем примитивный массив.
Алгоритм для копирования связанный список
public Node copyList (Node p)
{
Node q;
q = null;
if (p != null)
{
q = new Node();
q.data = p.data;
q.link = copyList(p.link);
}
return q;
}