Читайте также: |
|
Приведенная ниже таблица показывает все, что вы можете делать с Collection (за исключением тех методов, которые автоматически приходят от Object), и таким образом, все, что вы можете делать с Set или List. (List также5 имеет дополнительную функциональность.) Map не наследуются от Collection, о нем будет рассказано отдельно.
boolean add(Object) | Гарантирует, что контейнер содержит аргумент. Возвращает false, если не может добавить аргумент. (Это “необязательный” метод описывается позже в этой главе.) |
boolean addAll(Collection) | Добавляет все элементы аргумента. Возвращает true, если любые элементы были добавлены. (“Необязательно”) |
void clear() | Удаляет все элементы контейнера. (“Необязательно”) |
boolean contains(Object) | true, если контейнер содержит аргумент. |
boolean containsAll(Collection) | true, если контейнер содержит все элементы аргумента. |
boolean isEmpty() | true, если контейнер не имеет элементов. |
Iterator iterator() | Возвращает Iterator, который вы можете использовать для обхода элементов контейнера. |
boolean remove(Object) | Если аргумент присутствует в контейнере, один экземпляр этого элемента будет удален. Возвращает true, если произошло удаление. (“Необязательно”) |
boolean removeAll(Collection) | Удаляет все элементы, содержащиеся в аргументе. Возвращает true, если произошло любое удаление. (“Необязательно”) |
boolean retainAll(Collection) | Остаются только те элементы, которые содержатся в аргументе (в теории множеств называется “пересечением”). Возвращает true, если произошли любые изменения. (“Необязательно”) |
int size() | Возвращает число элементов контейнера. |
Object[] toArray() | Возвращает массив, содержащий все элементы контейнера. |
Object[] toArray(Object[] a) | Возвращает массив, содержащий все элементы контейнера, чей тип, скорее массив, а не простой Object (вы должны привести массив к правильному типу). |
Обратите внимание, что здесь нет функции get() для выбора элементов в случайном порядке. Это происходит потому, что Collection также включает Set, который содержит свой внутренний механизм упорядочивания (и это делает выборку в случайном порядке бессмысленной). Таким образом, если вы хотите проверить все элементы Collection, вы должны использовать итератор; это единственный способ получить вещи назад.
Приведенный ниже пример демонстрирует все эти методы. Кроме того, он работает со всем, что наследовано от Collection, и ArrayList используется в качестве “наиболее общего заменителя”:
//: c09:Collection1.java// То, что вы можете делать с Collections.import java.util.*;import com.bruceeckel.util.*; public class Collection1 { public static void main(String[] args) { Collection c = new ArrayList(); Collections2.fill(c, Collections2.countries, 10); c.add("ten"); c.add("eleven"); System.out.println(c); // Создание массива из List: Object[] array = c.toArray(); // Создание массива String из List: String[] str = (String[])c.toArray(new String[1]); // Нахождение максимального и минимального элементов; это // имеет разный смысл в зависимости от способа // реализации интерфейса Comparable: System.out.println("Collections.max(c) = " + Collections.max(c)); System.out.println("Collections.min(c) = " + Collections.min(c)); // Добавление одного Collection в другой Collection Collection c2 = new ArrayList(); Collections2.fill(c2, Collections2.countries, 10); c.addAll(c2); System.out.println(c); c.remove(CountryCapitals.pairs[0][0]); System.out.println(c); c.remove(CountryCapitals.pairs[1][0]); System.out.println(c); // Удаление всех компонентов, присутствующих в // аргументе: c.removeAll(c2); System.out.println(c); c.addAll(c2); System.out.println(c); // Есть ли элемент в этом Collection? String val = CountryCapitals.pairs[3][0]; System.out.println("c.contains(" + val + ") = " + c.contains(val)); // Есть ли Collection в этом Collection? System.out.println("c.containsAll(c2) = "+ c.containsAll(c2)); Collection c3 = ((List)c).subList(3, 5); // Сохранить элементы, которые есть в обоих // c2 и c3 (пересечение множеств): c2.retainAll(c3); System.out.println(c); // Отбросить все элементы // из c2, которые есть в c3: c2.removeAll(c3); System.out.println("c.isEmpty() = " + c.isEmpty()); c = new ArrayList(); Collections2.fill(c, Collections2.countries, 10); System.out.println(c); c.clear(); // Удалить все элементы System.out.println("after c.clear():"); System.out.println(c); }} ///:~ArrayList создаются с различными наборами данных и приводятся к базовому типу объекта Collection, так что достаточно ясно, что ничего, кроме интерфейса Collection не будет использоваться. main() использует простые упражнения, чтобы показать все методы Collection.
Следующий раздел описывает различные реализации: List, Set и Map и для каждого случая указывает (отмечено звездочкой) что вы должны выбирать по умолчанию. Вы заметите, что допустимые классы Vector, Stack и Hashtable не включены, потому что во всех случаях предпочтительней использовать контейнерные классы Java 2.
Дата добавления: 2015-09-11; просмотров: 24 | Поможем написать вашу работу | Нарушение авторских прав |