Чтение онлайн

на главную - закладки

Жанры

Философия Java3

Эккель Брюс

Шрифт:

Карта (Map) позволяет искать объекты по ключу, как несложная база данных. Объект, ассоциированный с ключом, называется значением. (Карты также называют ассоциативными массивами.)

В нашем примере используются три основные разновидности Map: HashMap, TreeMap и LinkedHashMap. Как и HashSet, HashMap обеспечивает максимальную скорость выборки, а порядок хранения его элементов не очевиден. TreeMap хранит ключи отсортированными по возрастанию, a LinkedHashMap

хранит ключи в порядке вставки, но обеспечивает скорость поиска HashMap.

List

Контейнеры List гарантируют определенный порядок следования элементов. Интерфейс List дополняет Collection несколькими методами, обеспечивающими вставку и удаление элементов в середине списка. Существует две основные разновидности List:

• Базовый контейнер ArrayList, оптимизированный для произвольного доступа к элементам, но с относительно медленнными операциями вставки (удаления) элементов в середине списка.

• Контейнер LinkedList, оптимизированный для последовательного доступа, с быстрыми операциями вставки (удаления) в середине списка; Произвольный доступ к элементам LinkedList выполняется относительно медленно, но по широте возможностей он превосходит ArrayList.

В следующем примере используется библиотека typenfo.pets из главы «Информация о типе». Она содержит иерархию классов домашних животных Pet, а также ряд вспомогательных средств для случайного построения объектов Pet. Пока достаточно знать, что (1) библиотека содержит класс Pet и производные типы, и (2) статический метод Pets.arrayList возвращает контейнер ArrayList, заполненный случайно выбранными объектами Pet.

//• hoi ding/ListFeatures.java import typeinfo.pets.*; import java.util.*;

import static net mindview util.Print.*:

public class ListFeatures {

public static void main(String[] args) { Random rand = new Random(47); List<Pet> pets = Pets.arrayList(7); printC'l: " + pets); Hamster h = new HamsterO; pets.add(h); // Автоматическое изменение размера print("2: " + pets); print("3: " + pets.contains(h)); pets.remove(h); // Удаление объекта

Pet p = pets.get(2); продолжение &

print("4: " + р + " " + pets.indexOf(p));

Pet cymric = new CymricO;

print("5: " + pets.indexOf(cymric));

print("6: " + pets.remove(cymric));

// Точно заданный объект:

print("7: " + pets.remove(p));

print("8: " + pets);

pets.add(3. new MouseO); // Вставка no индексу

print("9: " + pets);

List<Pet> sub = pets.subListd, 4);

printC'subList: " + sub);

print("10: " + pets.containsAll(sub));

Col lections.sort(sub); // Сортировка "на месте"

print("sorted subList: " + sub);

// Для containsAllО порядок неважен:

printC'll: " + pets.containsAll(sub));

Col 1ections.shuffle(sub. rand); // Случайная перестановка

print("shuffled subList: " + sub).

print("12: " + pets.containsAll(sub));

List<Pet> copy = new ArrayList<Pet>(pets);

sub = Arrays.asList(pets.getd). pets.get(4));

printC'sub: " + sub);

copy.retainAll(sub);

print("13: " + copy);

copy = new ArrayList<Pet>(pets); //

Получение новой копии copy remove(2); // Удаление по индексу print("14: " + copy);

copy.removeAll(sub); // Удаление заданных элементов print("15: " + copy);

copy.setd, new MouseO); // Замена элемента print("16: " + copy);

copy.addAll(2. sub); // Вставка в середину списка

pri nt("17: " + copy);

print("18: " + pets.isEmptyO);

pets.clearO; // Удаление всех элементов

print("19: " + pets);

print("20: " + pets isEmptyO);

pets.addAll(Pets.arrayList(4));

print("21: " + pets);

Object[] о = pets.toArrayO;

print("22: " + o[3]);

Pet[] pa = pets.toArray(new Pet[0]),

print("23: " + pa[3].id);

}

} /* Output

1: [Rat. Manx. Cymric. Mutt. Pug. Cymric. Pug]

2: [Rat. Manx. Cymric. Mutt. Pug. Cymric. Pug. Hamster]

3: true

4: Cymric 2

5: -1

6: false

7: true

8: [Rat. Manx. Mutt. Pug. Cymric. Pug] 9: [Rat. Manx. Mutt. Mouse. Pug. Cymric. Pug] subList: [Manx. Mutt. Mouse] 10: true

sorted subList: [Manx. Mouse. Mutt] 11: true

shuffled subList: [Mouse, Manx. Mutt] 12: true

sub: [Mouse. Pug] 13: [Mouse, Pug]

14: [Rat. Mouse. Mutt, Pug. Cymric, Pug]

15: [Rat. Mutt. Cymric. Pug]

16: [Rat. Mouse. Cymric. Pug]

17: [Rat. Mouse. Mouse. Pug. Cymric. Pug]

18: false

19: []

20: true

21: [Manx. Cymric. Rat. EgyptianMau] 22: EgyptianMau 23: 14 *///:-

Строки вывода пронумерованы, чтобы вам было удобнее связывать результат с исходным кодом.

В первой строке выводится исходный контейнер List с объектами Pets. В отличие от массивов, List поддерживает добавление и удаление элементов с изменением размеров списка. Результат добавления Hamster виден в строке 2: объект появляется в конце списка.

Метод contains проверяет, присутствует ли объект в списке. Чтобы удалить объект, передайте ссылку на него методу remove. Кроме того, при наличии ссылки на объект можно узнать его индекс в списке при помощи метода indexOf, как показано в строке 4.

При проверке вхождения элемента в List, проверке индекса элемента и удаления элемента из List по ссылке используется метод equals (из корневого класса Object). Все объекты Pet считаются уникальными, поэтому несмотря на присутствие двух объектов Cymric в списке, если я создам новый объект Cymric и передам его indexOf, результат будет равен -1 (элемент не найден), а вызов remove вернет false. Для других классов метод equals может быть определен иначе — например, объекты String считаются равными в случае совпадения содержимого.

Поделиться:
Популярные книги

Хорошая девочка

Кистяева Марина
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Хорошая девочка

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Черный Маг Императора 10

Герда Александр
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 10

Одержимый

Поселягин Владимир Геннадьевич
4. Красноармеец
Фантастика:
боевая фантастика
5.00
рейтинг книги
Одержимый

Фиктивная жена

Шагаева Наталья
1. Братья Вертинские
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Фиктивная жена

Хозяин Теней 3

Петров Максим Николаевич
3. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Хозяин Теней 3

Маленькая хозяйка большого герцогства

Вера Виктория
2. Герцогиня
Любовные романы:
любовно-фантастические романы
7.80
рейтинг книги
Маленькая хозяйка большого герцогства

Курсант: Назад в СССР 10

Дамиров Рафаэль
10. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 10

Гридень 2. Поиск пути

Гуров Валерий Александрович
2. Гридень
Детективы:
исторические детективы
5.00
рейтинг книги
Гридень 2. Поиск пути

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

Оружие победы

Грабин Василий Гаврилович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Оружие победы

Звездная Кровь. Изгой II

Елисеев Алексей Станиславович
2. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
технофэнтези
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой II

Конунг Туманного острова

Чайка Дмитрий
12. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Конунг Туманного острова

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке