Эта страница суммирует улучшения к платформе наборов в версии 5 JDK.
Три новых функции языка значительно улучшают платформу наборов:
Обобщения - добавляют безопасность типов времени компиляции к платформе наборов и избавляют от необходимости бросать, читая элементы из наборов.
Улучшенный цикл for - избавляет от необходимости явный iterators когда interating по наборам.
Автоупаковка/распаковывание - автоматически преобразовывает примитивы (такие как int) к классам обертки (таким как Integer), вставляя их в наборы, и преобразовывает экземпляры класса обертки в примитивы, читая из наборов.
Обеспечиваются три новых интерфейса набора:
Queue - представляет набор, разработанный для содержания элементов до обработки. Помимо основных операций Collection, очереди обеспечивают дополнительную вставку, экстракцию, и инспекционные операции.
BlockingQueue - расширяет Queue с помощью операций, которые ожидают очереди, чтобы стать непустыми, получая элемент, и которые ожидают пространства, чтобы стать доступными в очереди, храня элемент. (Этот интерфейс является частью нового пакета java.util.concurrent.)
ConcurrentMap - расширяет Map с помощью атомарного putIfAbsent, remove, и методов replace. (Этот интерфейс является частью java.util.concurrent.)
Две новых конкретных реализации Queue обеспечиваются, одна существующая реализация List была retrofitted, чтобы реализовать Queue, и одна абстрактная реализация Queue обеспечивается:
PriorityQueue - неограниченная приоритетная очередь отступала "кучей".
ConcurrentLinkedQueue - неограниченный ориентированный на многопотоковое исполнение FIFO (сначала - в первом) очередь отступал соединенными узлами. (Этот класс является частью java.util.concurrent.)
LinkedList - retrofitted, чтобы реализовать интерфейс Queue. Когда получено доступ через интерфейс Queue, LinkedList ведет себя как очередь FIFO.
ConcurrentHashMap - очень параллельная, высокоэффективная реализация ConcurrentMap отступала хэш-таблицей. Эта реализация никогда не блокирует, выполняя извлечения и позволяет клиенту выбирать уровень параллелизма для обновлений. Это предназначается как понижение замены для Hashtable: в дополнение к реализации ConcurrentMap это поддерживает все методы "наследства", специфические для Hashtable.
List специального назначения и реализации Set обеспечиваются для использования в ситуациях, где операции чтения значительно превосходят численностью операции записи, и итерация не может или не должна синхронизироваться:
CopyOnWriteArrayList - реализация List отступала массивом. Все изменчивые операции (такие как add, set, и remove) реализуются, делая новую копию массива. Никакая синхронизация не необходима, даже во время итерации, и iterators, как гарантируют, никогда не не бросят ConcurrentModificationException. Эта реализация является подходящей к поддержанию списков обработчика событий (где изменение является нечастым, и обход является частым и потенциально отнимающим много времени).
CopyOnWriteArraySet - реализация Set отступала массивом копии на записи. Эта реализация подобна в природе CopyOnWriteArrayList. В отличие от большинства реализаций Set, add, remove, и методы contains требуют времени, пропорционального размеру набора. Эта реализация является подходящей к поддержанию списков обработчика событий, которые должны предотвратить копии.
Set специального назначения и реализации Map обеспечиваются для использования с перечислениями:
EnumSet - высокоэффективная реализация Set отступала битовый вектором. Все элементы каждого экземпляра EnumSet должны быть элементами единственного перечислимого типа.
EnumMap - высокоэффективная реализация Map отступала массивом. Все ключи в каждом экземпляре EnumMap должны быть элементами единственного перечислимого типа.
Новому семейству реализаций обертки предоставляют, прежде всего для использования с универсальными наборами:
Collections.checkedInterface - возвращает динамически безопасное с точки зрения типов представление указанного набора, который бросает ClassCastException, если клиент пытается добавить элемент неправильного типа. Механизм обобщений на языке обеспечивает время компиляции (статическая) проверка типа, но возможно победить этот механизм. Динамически безопасные с точки зрения типов представления устраняют эту возможность полностью.
Три новых универсальных алгоритма и один преобразователь компаратора были добавлены к классу утилиты Collections:
Класс утилиты Arrays был снабжен оборудованием с основанными на контенте методами hashCode И toString для массивов всех типов. Эти методы дополняют существующие методы equals. Версии всех трех методов обеспечиваются, чтобы управлять на вложенном (или "многомерный") массивами: deepEquals, deepHashCode, и deepToString. Это теперь тривиально, чтобы напечатать содержание любого массива. Идиома для того, чтобы напечатать "плоский" массив:
System.out.println(Arrays.toString(a));
Идиома для того, чтобы напечатать вложенный (многомерный) массив: