Spec-Zone.ru › OpenJDK 27

Класс HashMap<K,V>

java.lang.Object
java.util.AbstractMap<K,V>
java.util.HashMap<K,V>
Параметры типа:
K — тип ключей, поддерживаемых этой картой
V — тип отображаемых значений
Все реализуемые интерфейсы:
Serializable, Cloneable, Map<K,V>
Прямые известные подклассы:
LinkedHashMap, PrinterStateReasons
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
Реализация интерфейса Map на основе хеш-таблицы. Эта реализация предоставляет все необязательные операции с отображениями и допускает значения null и ключ null. (Класс HashMap примерно эквивалентен Hashtable, за исключением того, что он не синхронизирован и допускает null.) Этот класс не дает никаких гарантий относительно порядка элементов отображения; в частности, он не гарантирует, что порядок останется неизменным с течением времени.

Эта реализация обеспечивает постоянное время выполнения основных операций (get и put) при условии, что хеш-функция правильно распределяет элементы по корзинам. Итерация по представлениям коллекций требует времени, пропорционального «емкости» экземпляра HashMap (количеству корзин) плюс его размеру (количеству пар ключ-значение). Поэтому, если важна производительность итерации, крайне важно не задавать слишком большую начальную емкость (или слишком низкий коэффициент загрузки).

У экземпляра HashMap есть два параметра, влияющих на его производительность: начальная емкость и коэффициент загрузки. Емкость — это количество корзин в хеш-таблице, а начальная емкость — это просто емкость на момент создания хеш-таблицы. Коэффициент загрузки определяет, насколько заполненной может стать хеш-таблица, прежде чем ее емкость будет автоматически увеличена. Когда количество элементов в хеш-таблице превышает произведение коэффициента загрузки на текущую емкость, хеш-таблица подвергается перехешированию (то есть внутренние структуры данных перестраиваются), чтобы количество корзин в ней стало примерно вдвое больше.

Как правило, значение коэффициента загрузки по умолчанию (.75) обеспечивает хороший компромисс между затратами времени и памяти. Более высокие значения уменьшают накладные расходы по памяти, но увеличивают стоимость поиска (что отражается на большинстве операций класса HashMap, включая get и put). При задании начальной емкости следует учитывать ожидаемое количество элементов в отображении и коэффициент загрузки, чтобы свести к минимуму число операций перехеширования. Если начальная емкость превышает максимальное количество элементов, деленное на коэффициент загрузки, операции перехеширования не понадобятся.

Если в экземпляре HashMap предполагается хранить много отображений, создание его с достаточно большой емкостью позволит хранить отображения эффективнее, чем автоматическое перехеширование по мере необходимости для увеличения таблицы. Обратите внимание: использование множества ключей с одинаковым hashCode() гарантированно замедляет работу любой хеш-таблицы. Чтобы смягчить этот эффект, если ключи реализуют интерфейс Comparable, этот класс может использовать порядок сравнения ключей для разрешения конфликтов.

Обратите внимание, что эта реализация не синхронизирована. Если к хеш-отображению одновременно обращаются несколько потоков и хотя бы один из них структурно изменяет отображение, доступ должен синхронизироваться извне. (Структурным изменением считается любая операция, добавляющая или удаляющая одно или несколько отображений; простое изменение значения, связанного с ключом, который уже содержится в экземпляре, не является структурным изменением.) Обычно это достигается синхронизацией по объекту, который естественным образом инкапсулирует отображение. Если такого объекта нет, отображение следует «обернуть», используя метод Collections.synchronizedMap. Лучше всего сделать это при создании, чтобы предотвратить случайный несинхронизированный доступ к отображению:

  Map m = Collections.synchronizedMap(new HashMap(...));

Итераторы, возвращаемые всеми «методами представлений коллекций» этого класса, являются быстро завершающимися: если после создания итератора отображение будет структурно изменено любым способом, кроме вызова собственного метода remove итератора, итератор выбросит исключение ConcurrentModificationException. Таким образом, при параллельном изменении итератор быстро и корректно завершает работу, не допуская произвольного недетерминированного поведения в неопределенный момент в будущем.

Обратите внимание, что гарантировать быстрое завершение итератора невозможно, поскольку, вообще говоря, при несинхронизированном параллельном изменении нельзя дать никаких строгих гарантий. Итераторы с быстрым завершением выбрасывают ConcurrentModificationException по возможности. Поэтому было бы ошибкой писать программу, корректность которой зависит от этого исключения: быстрое завершение итераторов следует использовать только для обнаружения ошибок.

Этот класс входит в состав Java Collections Framework.

Начиная с версии:
1.2
См. также:
  • Object.hashCode()
  • Collection
  • Map
  • TreeMap
  • Hashtable
  • Сериализованная форма

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в классе AbstractMap

AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
Модификатор и тип Класс Описание
static class  AbstractMap.SimpleEntry<K,V>
Запись, содержащая ключ и значение.
static class  AbstractMap.SimpleImmutableEntry<K,V>
Неизменяемая запись, содержащая ключ и значение.

Вложенные классы/интерфейсы, объявленные в интерфейсе Map

Map.Entry<K,V>
Модификатор и тип Интерфейс Описание
static interface  Map.Entry<K,V>
Запись отображения (пара ключ-значение).

Краткое описание конструкторов

Конструктор Описание
HashMap()
Создает пустой HashMap с начальной емкостью по умолчанию (16) и коэффициентом загрузки по умолчанию (0.75).
HashMap(int initialCapacity)
Создает пустой HashMap с заданной начальной емкостью и коэффициентом загрузки по умолчанию (0.75).
HashMap(int initialCapacity, float loadFactor)
Создает пустой HashMap с заданными начальной емкостью и коэффициентом загрузки.
HashMap(Map<? extends K, ? extends V> m)
Создает новый HashMap с теми же отображениями, что и указанный Map.

Краткое описание методов

Модификатор и тип Метод Описание
void clear()
Удаляет все отображения из этой карты.
Object clone()
Возвращает поверхностную копию этого экземпляра HashMap: сами ключи и значения не клонируются.
V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Пытается вычислить отображение для указанного ключа и его текущего отображаемого значения или null, если текущего отображения нет (необязательная операция).
V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
Если указанный ключ еще не связан со значением (или отображается в null), пытается вычислить его значение с помощью заданной функции отображения и добавляет его в эту карту, если результат не равен null (необязательная операция).
V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Если для указанного ключа существует ненулевое значение, пытается вычислить новое отображение на основе ключа и его текущего отображаемого значения (необязательная операция).
boolean containsKey(Object key)
Возвращает true, если эта карта содержит отображение для указанного ключа.
boolean containsValue(Object value)
Возвращает true, если эта карта отображает один или несколько ключей в указанное значение.
Set<Map.Entry<K,V>> entrySet()
Возвращает представление Set отображений, содержащихся в этой карте.
V get(Object key)
Возвращает значение, в которое отображается указанный ключ, или null, если эта карта не содержит отображения для ключа.
boolean isEmpty()
Возвращает true, если эта карта не содержит пар ключ-значение.
Set<K> keySet()
Возвращает представление Set ключей, содержащихся в этой карте.
V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
Если указанный ключ еще не связан со значением или связан со значением null, связывает его с заданным ненулевым значением (необязательная операция).
static <K,V> HashMap<K,V> newHashMap(int numMappings)
Создает новую пустую HashMap, подходящую для ожидаемого количества отображений.
V put(K key, V value)
Связывает указанное значение с указанным ключом в этой карте.
void putAll(Map<? extends K, ? extends V> m)
Копирует все отображения из указанной карты в эту карту.
V remove(Object key)
Удаляет отображение для указанного ключа из этой карты, если оно существует.
int size()
Возвращает количество пар ключ-значение в этой карте.
Collection<V> values()
Возвращает представление Collection значений, содержащихся в этой карте.

Методы, объявленные в классе AbstractMap

equals, hashCode, toString
Модификатор и тип Метод Описание
boolean equals(Object o)
Сравнивает указанный объект с этой картой на равенство.
int hashCode()
Возвращает значение хеш-кода этой карты.
String toString()
Возвращает строковое представление этой карты.

Методы, объявленные в классе Object

finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected void finalize()
Устарело, будет удалено: этот элемент API может быть удален в будущей версии.
Финализация устарела и будет удалена в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие уведомления или прерывания, либо до истечения заданного промежутка реального времени.

Методы, объявленные в интерфейсе Map

forEach, getOrDefault, putIfAbsent, remove, replace, replace, replaceAll
Модификатор и тип Метод Описание
default void forEach(BiConsumer<? super K, ? super V> action)
Выполняет указанное действие для каждой записи этой карты, пока не будут обработаны все записи или действие не выбросит исключение.
default V getOrDefault(Object key, V defaultValue)
Возвращает значение, в которое отображается указанный ключ, или defaultValue, если эта карта не содержит отображения для ключа.
default V putIfAbsent(K key, V value)
Если указанный ключ еще не связан со значением (или отображается в null), связывает его с заданным значением и возвращает null; в противном случае возвращает текущее значение (необязательная операция).
default boolean remove(Object key, Object value)
Удаляет запись для указанного ключа, только если в данный момент он отображается в указанное значение (необязательная операция).
default V replace(K key, V value)
Заменяет запись для указанного ключа, только если в данный момент он отображается в какое-либо значение (необязательная операция).
default boolean replace(K key, V oldValue, V newValue)
Заменяет запись для указанного ключа, только если в данный момент он отображается в указанное значение (необязательная операция).
default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function)
Заменяет значение каждой записи результатом вызова заданной функции для этой записи, пока не будут обработаны все записи или функция не выбросит исключение (необязательная операция).

Подробное описание конструкторов

HashMap

public HashMap(int initialCapacity, float loadFactor)
Создает пустую HashMap с заданной начальной емкостью и коэффициентом загрузки.
Примечание к API:
Чтобы создать HashMap с начальной емкостью, рассчитанной на ожидаемое количество отображений, используйте newHashMap.
Параметры:
initialCapacity — начальная емкость
loadFactor — коэффициент загрузки
Исключения:
IllegalArgumentException — если начальная емкость отрицательна или коэффициент загрузки неположителен

HashMap

public HashMap(int initialCapacity)
Создает пустую HashMap с заданной начальной емкостью и коэффициентом загрузки по умолчанию (0.75).
Примечание к API:
Чтобы создать HashMap с начальной емкостью, рассчитанной на ожидаемое количество отображений, используйте newHashMap.
Параметры:
initialCapacity — начальная емкость.
Исключения:
IllegalArgumentException — если начальная емкость отрицательна.

HashMap

public HashMap()
Создает пустую HashMap с начальной емкостью по умолчанию (16) и коэффициентом загрузки по умолчанию (0.75).

HashMap

public HashMap(Map<? extends K, ? extends V> m)
Создает новую HashMap с теми же отображениями, что и указанная Map. HashMap создается с коэффициентом загрузки по умолчанию (0.75) и начальной емкостью, достаточной для хранения отображений указанной Map.
Параметры:
m — карта, отображения которой следует поместить в эту карту
Исключения:
NullPointerException — если указанная карта равна null

Подробное описание методов

size

public int size()
Возвращает количество отображений «ключ-значение» в этой карте.
Определено в:
size в интерфейсе Map<K,V>
Переопределяет:
size в классе AbstractMap<K,V>
Возвращает:
количество отображений «ключ-значение» в этой карте

isEmpty

public boolean isEmpty()
Возвращает true, если эта карта не содержит отображений «ключ-значение».
Определено в:
isEmpty в интерфейсе Map<K,V>
Переопределяет:
isEmpty в классе AbstractMap<K,V>
Возвращает:
true, если эта карта не содержит отображений «ключ-значение»

get

public V get(Object key)
Возвращает значение, которому соответствует указанный ключ, или null, если в этой карте нет отображения для данного ключа.

Формально, если эта карта содержит отображение от ключа k к значению v, такое что (key==null ? k==null : key.equals(k)), этот метод возвращает v; в противном случае он возвращает null. (Такое отображение может быть не более чем одно.)

Возвращаемое значение null не обязательно означает, что в карте нет отображения для данного ключа; также возможно, что карта явно сопоставляет ключу значение null. Для различения этих двух случаев можно использовать операцию containsKey.

Определено в:
get в интерфейсе Map<K,V>
Переопределяет:
get в классе AbstractMap<K,V>
Параметры:
key — ключ, значение которого необходимо вернуть
Возвращает:
значение, которому соответствует указанный ключ, или null, если в этой карте нет отображения для данного ключа
См. также:
  • put(Object, Object)

containsKey

public boolean containsKey(Object key)
Возвращает true, если эта карта содержит отображение для указанного ключа.
Определено в:
containsKey в интерфейсе Map<K,V>
Переопределяет:
containsKey в классе AbstractMap<K,V>
Параметры:
key — ключ, наличие которого в этой карте необходимо проверить
Возвращает:
true, если эта карта содержит отображение для указанного ключа.

put

public V put(K key, V value)
Связывает указанное значение с указанным ключом в этой карте. Если ранее карта содержала отображение для этого ключа, старое значение заменяется.
Определено в:
put в интерфейсе Map<K,V>
Переопределяет:
put в классе AbstractMap<K,V>
Параметры:
key — ключ, с которым связывается указанное значение
value — значение, связываемое с указанным ключом
Возвращает:
предыдущее значение, связанное с key, или null, если для key не было отображения. (Возвращаемое значение null также может означать, что ранее карта связывала null с key.)

putAll

public void putAll(Map<? extends K, ? extends V> m)
Копирует все отображения из указанной карты в эту карту. Эти отображения заменят все отображения для ключей, которые уже присутствуют в указанной карте.
Определено в:
putAll в интерфейсе Map<K,V>
Переопределяет:
putAll в классе AbstractMap<K,V>
Параметры:
m — отображения, которые необходимо сохранить в этой карте
Исключения:
NullPointerException — если указанная карта равна null

remove

public V remove(Object key)
Удаляет отображение для указанного ключа из этой карты, если оно существует.
Определено в:
remove в интерфейсе Map<K,V>
Переопределяет:
remove в классе AbstractMap<K,V>
Параметры:
key — ключ, отображение которого следует удалить из карты
Возвращает:
предыдущее значение, связанное с key, или null, если для key не было отображения. (Возвращаемое значение null также может означать, что ранее карта связывала null с key.)

clear

public void clear()
Удаляет все отображения из этой карты. После возврата этого вызова карта будет пустой.
Определено в:
clear в интерфейсе Map<K,V>
Переопределяет:
clear в классе AbstractMap<K,V>

containsValue

public boolean containsValue(Object value)
Возвращает true, если эта карта связывает один или несколько ключей с указанным значением.
Определено в:
containsValue в интерфейсе Map<K,V>
Переопределяет:
containsValue в классе AbstractMap<K,V>
Параметры:
value — значение, наличие которого в этой карте необходимо проверить
Возвращает:
true, если эта карта связывает один или несколько ключей с указанным значением

keySet

public Set<K> keySet()
Возвращает представление ключей, содержащихся в этой карте, в виде Set. Множество поддерживается картой, поэтому изменения карты отражаются в множестве, и наоборот. Если карта изменяется во время итерации по множеству (кроме изменений с помощью собственной операции remove итератора), результаты итерации не определены. Множество поддерживает удаление элементов, которое удаляет соответствующее отображение из карты с помощью операций Iterator.remove, Set.remove, removeAll, retainAll и clear. Оно не поддерживает операции add и addAll.
Определено в:
keySet в интерфейсе Map<K,V>
Переопределяет:
keySet в классе AbstractMap<K,V>
Возвращает:
представление ключей, содержащихся в этой карте, в виде множества

values

public Collection<V> values()
Возвращает представление значений, содержащихся в этой карте, в виде Collection. Коллекция поддерживается картой, поэтому изменения карты отражаются в коллекции, и наоборот. Если карта изменяется во время итерации по коллекции (кроме изменений с помощью собственной операции remove итератора), результаты итерации не определены. Коллекция поддерживает удаление элементов, которое удаляет соответствующее отображение из карты с помощью операций Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add и addAll.
Определено в:
values в интерфейсе Map<K,V>
Переопределяет:
values в классе AbstractMap<K,V>
Возвращает:
представление значений, содержащихся в этой карте

entrySet

public Set<Map.Entry<K,V>> entrySet()
Возвращает представление отображений, содержащихся в этой карте, в виде Set. Множество поддерживается картой, поэтому изменения карты отражаются в множестве, и наоборот. Если карта изменяется во время итерации по множеству (кроме изменений с помощью собственной операции remove итератора или операции setValue над записью карты, возвращенной итератором), результаты итерации не определены. Множество поддерживает удаление элементов, которое удаляет соответствующее отображение из карты с помощью операций Iterator.remove, Set.remove, removeAll, retainAll и clear. Оно не поддерживает операции add и addAll.
Определено в:
entrySet в интерфейсе Map<K,V>
Возвращает:
представление отображений, содержащихся в этой карте, в виде множества

computeIfAbsent

public V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
Если указанному ключу еще не соответствует значение (или ему соответствует null), пытается вычислить его с помощью заданной функции отображения и добавить в эту карту, если результат не равен null (необязательная операция).

Если функция отображения возвращает null, отображение не сохраняется. Если сама функция отображения выбрасывает (непроверяемое) исключение, оно повторно выбрасывается, а отображение не сохраняется. Наиболее распространенное применение — создание нового объекта в качестве начального отображаемого значения или мемоизированного результата, например:

map.computeIfAbsent(key, k -> new Value(f(k)));

Или реализация карты с несколькими значениями, Map<K,Collection<V>>, поддерживающей несколько значений для одного ключа:

map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);

Функция отображения не должна изменять эту карту во время вычисления.

Этот метод по возможности выбрасывает ConcurrentModificationException, если обнаружено, что функция отображения изменяет эту карту во время вычисления.

Определено в:
computeIfAbsent в интерфейсе Map<K,V>
Параметры:
key — ключ, с которым связывается указанное значение
mappingFunction — функция отображения для вычисления значения
Возвращает:
текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null
Исключения:
ConcurrentModificationException — если обнаружено, что функция отображения изменила эту карту

computeIfPresent

public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Если для указанного ключа имеется ненулевое значение, пытается вычислить новое отображение на основе ключа и текущего связанного с ним значения (необязательная операция).

Если функция переотображения возвращает null, отображение удаляется. Если сама функция переотображения выбрасывает (непроверяемое) исключение, оно повторно выбрасывается, а текущее отображение остается неизменным.

Функция переотображения не должна изменять эту карту во время вычисления.

Этот метод по возможности выбрасывает ConcurrentModificationException, если обнаружено, что функция переотображения изменяет эту карту во время вычисления.

Определено в:
computeIfPresent в интерфейсе Map<K,V>
Параметры:
key — ключ, с которым связывается указанное значение
remappingFunction — функция переотображения для вычисления значения
Возвращает:
новое значение, связанное с указанным ключом, или null, если такого значения нет
Исключения:
ConcurrentModificationException — если обнаружено, что функция переотображения изменила эту карту

compute

public V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Пытается вычислить отображение для указанного ключа и текущего связанного с ним значения либо null, если текущего отображения нет (необязательная операция). Например, чтобы создать или добавить String msg к отображаемому значению:
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(Для таких целей часто проще использовать метод merge().)

Если функция переотображения возвращает null, отображение удаляется (или остается отсутствующим, если изначально отсутствовало). Если сама функция переотображения выбрасывает (непроверяемое) исключение, оно повторно выбрасывается, а текущее отображение остается неизменным.

Функция переотображения не должна изменять эту карту во время вычисления.

Этот метод по возможности выбрасывает ConcurrentModificationException, если обнаружено, что функция переотображения изменяет эту карту во время вычисления.

Определено в:
compute в интерфейсе Map<K,V>
Параметры:
key — ключ, с которым связывается указанное значение
remappingFunction — функция переотображения для вычисления значения
Возвращает:
новое значение, связанное с указанным ключом, или null, если такого значения нет
Исключения:
ConcurrentModificationException — если обнаружено, что функция переотображения изменила эту карту

merge

public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
Если указанному ключу еще не соответствует значение или ему соответствует null, связывает его с заданным ненулевым значением (необязательная операция). В противном случае заменяет связанное значение результатом заданной функции переотображения или удаляет его, если результат равен null. Этот метод может быть полезен при объединении нескольких отображаемых значений для одного ключа. Например, чтобы создать или добавить String msg к отображаемому значению:
map.merge(key, msg, String::concat)

Если функция переотображения возвращает null, отображение удаляется. Если сама функция переотображения выбрасывает (непроверяемое) исключение, оно повторно выбрасывается, а текущее отображение остается неизменным.

Функция переотображения не должна изменять эту карту во время вычисления.

Этот метод по возможности выбрасывает ConcurrentModificationException, если обнаружено, что функция переотображения изменяет эту карту во время вычисления.

Определено в:
merge в интерфейсе Map<K,V>
Параметры:
key — ключ, с которым связывается результирующее значение
value — ненулевое значение, объединяемое с существующим значением, связанным с ключом, или связываемое с ключом, если существующего значения нет либо с ключом связано значение null
remappingFunction — функция переотображения для повторного вычисления значения, если оно имеется
Возвращает:
новое значение, связанное с указанным ключом, или null, если с ключом не связано никакое значение
Исключения:
ConcurrentModificationException — если обнаружено, что функция переотображения изменила эту карту

clone

public Object clone()
Возвращает поверхностную копию этого экземпляра HashMap: сами ключи и значения не клонируются.
Переопределяет:
clone в классе AbstractMap<K,V>
Возвращает:
поверхностную копию этой карты
См. также:
  • Cloneable

newHashMap

public static <K,V> HashMap<K,V> newHashMap(int numMappings)
Создает новую пустую HashMap, подходящую для ожидаемого количества отображений. Возвращаемая карта использует коэффициент загрузки по умолчанию 0.75, а ее начальная емкость обычно достаточна для добавления ожидаемого количества отображений без изменения размера карты.
Параметры типа:
K — тип ключей, хранящихся в новой карте
V — тип отображаемых значений
Параметры:
numMappings — ожидаемое количество отображений
Возвращает:
созданную карту
Исключения:
IllegalArgumentException — если numMappings отрицательно
Начиная с версии:
19

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API