Урок 16

Унаследованные коллекции


Унаследованные коллекции (Legacy Collections) – это коллекции языка Java 1.0/1.1. И хотя эти классы были достаточно удобны, им недоставало общей, объединяющей основы.

В ряде распределенных приложений до сих пор применяются унаследованные коллекции, более медленные в обработке, но при этом потокобезопасные, существовавшие в языке Java с момента его создания.

Унаследованные коллекции

1. Класс Vector

Класс Vector реализует динамический массив. Он подобен ArrayList, но с двумя отличиями: Vector синхронизирован и включает много унаследованных методов, не являющихся частью каркаса коллекций.

С появлением коллекций Vector был перепроектирован как расширение AbstractList, и в него была добавлена реализация интерфейса List. В версии jDК5 он был перепроектирован под применение обобщённого синтаксиса, и в нем появилась реализация интерфейса Iterable.

2. Класс Stack

class Dictionary<K, V>

Stack это подкласс Vector, который реализует стандартный стек LIFO. Stack определяет только конструктор по умолчанию, создающий пустой стек.

С появлением версии Java 5 подкласс Stack был перепроектирован под обобщенный синтаксис, и теперь он объявлен следующим образом: 

class Stack<E> 

3. Класс Dictionary

Dictionary это абстрактный класс, представляющий репозиторий для хранения пар "ключ-значение" и работающий в основном подобно Мар. Передав ключ и значение, вы можете сохранить значение в объекте Dictionary. Однажды сохраненное значение можно извлечь по его ключу. То есть, подобно карте, Dictionary (словарь) можно считать списком пар "ключ-значение".

Хотя пока Dictionary не объявлен нежелательным, его можно рассматривать как устаревший, поскольку его полностью заменяет Мар.

С появлением Java 5 класс Dictionary был также сделан обобщенным: 

class Dictionary<K, V>

4. Класс Hashtable

Hashtable это часть исходного пакета java.util и конкретная реализация Dictionary. Однако с появлением коллекций класс Hashtable был перепроектирован с тем, чтобы также реализовывать интерфейс Мар. То есть Hashtable теперь интегрирован в каркас коллекций. Он подобен HashMap, но синхронизирован. Подобно HashМap, Hashtable сохраняет пары "ключ-значение" в хеш-таблице. Однако ни ключи, ни значения не могут быть равны null.

Hashtable был сделан обобщенным в Java 5: 

class Hashtable<K, V>

5. Класс Properties

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

Одно удобное свойство класса Properties это то, что вы можете указать значения по умолчанию, которые будут возвращены, если никакое значение не ассоциировано с определенным ключом. Например, значение по умолчанию может быть указано вместе с ключом в методе getProperty() как, например, в getProperty("имя", "значение по умолчанию"). Если значение "имя" не найдено, возвращается "значение по умолчанию".

Пример 1. Использования класса Properties

import java.util.Properties;
import java.util.Set;

public class PropertyDemo {
    public static void main(String[] args) {
        Properties capitals = new Properties();

        capitals.put("Illinois", "Springfield");
        capitals.put("Missouri", "Jefferson City");
        capitals.put("Washington", "Olympia");
        capitals.put("California", "Sacramento");
        capitals.put("Indiana", "Indianapolis");

        // Get a set-view of the keys.
        Set states = capitals.keySet();

        // Show all of the states and capitals.
        for (Object name : states) {
            System.out.println("The capital of " + name + " is "
                    + capitals.getProperty((String) name) + ".");
        }

        System.out.println();

        // Look for state not in list -- specify default.
        String str = capitals.getProperty("Florida", "Not Found");
        System.out.println("The capital of Florida is "
                + str + ".");
    }
}

6. Интерфейс Enumeration

Интерфейс Enumeration определяет методы, которыми вы можете перечислить (получая по одному за раз) элементы в коллекции объектов. Этот унаследованный интерфейс был замещен Iterator.

Хотя Enumeration и не является не рекомендованным, но считается устаревшим для нового кода. Однако он используется несколькими методами унаследованных классов (таких как Vector или Properties), также некоторыми другими классами АРI. Поскольку он все еще задействован, он был перепроектирован в обобщенном виде jDK 5. Он имеет следующее объявление: 

interface Enumeration<E> 

В Enumeration определены следующие два метода:

boolean hasMoreElements() 
Е nextElement() 


0 comments
Leave your comment: