Класс SizeSequence
public class SizeSequence extends Object
Другой пример — многоколоночный компонент, такой как JTable, в котором размеры столбцов не равны. Объект SizeSequence может быть использован для хранения ширины и позиций X всех столбцов. Затем компонент может использовать объект SizeSequence для нахождения столбца, соответствующего определённой позиции. Компонент может обновлять объект SizeSequence всякий раз, когда изменяются размеры одного или нескольких столбцов.
На рисунке ниже показаны отношения между данными о размере и позиции для многоколоночного компонента.
На рисунке первый индекс (0) соответствует первому столбцу, второй индекс (1) — второму столбцу и т. д. Позиция первого столбца начинается с 0, и столбец занимает size0 пикселей, где size0 — значение, возвращаемое getSize(0). Таким образом, первый столбец заканчивается в позиции size0 - 1. Второй столбец начинается с позиции size0 и занимает size1 (getSize(1)) пикселей.
Обратите внимание, что объект SizeSequence просто представляет собой интервалы вдоль оси. В наших примерах интервалы представляют высоту или ширину в пикселях. Однако любая другая единица измерения (например, время в днях) может быть столь же допустима.
Примечания по реализации
Обычно при хранении размера и позиции элементов, выбор делается между хранением размеров или хранением позиций. При отрисовке необходимы две основные операции:getIndex(position) и setSize(index, size). В зависимости от выбора внутреннего формата одна из этих операций будет дорогостоящей при большом количестве элементов. Если хранятся размеры, поиск индекса элемента, содержащего определённую позицию, выполняется линейно, пропорционально количеству элементов. Если хранятся позиции, установка размера элемента в определённом индексе требует обновления позиций затронутых элементов, что также является линейным вычислением. Аналогично вышеизложенным методам, этот класс внутренне хранит массив из N целых чисел, но использует гибридное кодирование, которое находится между подходами, основанными на размерах и позициях. Результатом является структура данных, занимающая такое же пространство для хранения информации, но может выполнять большинство операций за время Log(N) вместо O(N), где N — количество элементов в списке.
Две операции, которые остаются O(N) в зависимости от количества элементов, это методы insertEntries и removeEntries, которые реализованы путём преобразования внутреннего массива в набор целочисленных размеров, копирования его в новый массив, а затем переформирования гибридного представления на месте.
- Since:
- 1.3
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
SizeSequence() |
Создаёт новый объект SizeSequence, не содержащий элементов. |
SizeSequence |
Создаёт новый объект SizeSequence, содержащий указанное количество элементов, все с размером 0. |
SizeSequence |
Создаёт новый объект SizeSequence, содержащий указанные размеры. |
SizeSequence |
Создаёт новый объект SizeSequence, содержащий указанное количество элементов, все с размером value. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
getIndex |
Возвращает индекс элемента, соответствующего указанной позиции. |
int |
getPosition |
Возвращает начальную позицию для указанного элемента. |
int |
getSize |
Возвращает размер указанного элемента. |
int[] |
getSizes() |
Возвращает размер всех элементов. |
void |
insertEntries |
Добавляет непрерывную группу элементов в этот объект SizeSequence. |
void |
removeEntries |
Удаляет непрерывную группу элементов из этого объекта SizeSequence. |
void |
setSize |
Устанавливает размер указанного элемента. |
void |
setSizes |
Сбрасывает этот объект SizeSequence, используя данные в аргументе size. |
Подробное описание конструкторов
SizeSequence
public SizeSequence()
SizeSequence, не содержащий записей. Для добавления записей можно использовать методы insertEntries или setSizes. - См. также:
SizeSequence
public SizeSequence(int numEntries)
SizeSequence, содержащий указанное количество записей, все с размером 0.- Параметры:
-
numEntries- количество размеров для отслеживания - Исключения:
-
NegativeArraySizeException- еслиnumEntries < 0
SizeSequence
public SizeSequence(int numEntries, int value)
SizeSequence, содержащий указанное количество записей, все с размером value.- Параметры:
-
numEntries- количество размеров для отслеживания -
value- начальное значение каждого размера
SizeSequence
public SizeSequence(int[] sizes)
SizeSequence, содержащий указанные размеры.- Параметры:
-
sizes- массив размеров, которые будут содержаться вSizeSequence
Подробное описание методов
setSizes
public void setSizes(int[] sizes)
SizeSequence, используя данные в аргументе sizes. Этот метод переинициализирует объект так, чтобы он содержал столько же записей, сколько элементов в массиве sizes. Размер каждой записи инициализируется значением соответствующего элемента в sizes.- Параметры:
-
sizes- массив размеров, которые должны быть сохранены в этом объектеSizeSequence
getSizes
public int[] getSizes()
- Возвращает:
- новый массив, содержащий размеры в этом объекте
getPosition
public int getPosition(int index)
getPosition(0) возвращает 0, getPosition(1) равно getSize(0), getPosition(2) равно getSize(0) + getSize(1), и так далее. Обратите внимание, что если index больше чем length, возвращаемое значение может быть бессмысленным.
- Параметры:
-
index- индекс записи, позиция которой требуется - Возвращает:
- начальную позицию указанной записи
getIndex
public int getIndex(int position)
getIndex(0) равен 0, так как первая запись всегда начинается с позиции 0.- Параметры:
-
position- позиция записи - Возвращает:
- индекс записи, занимающей указанную позицию
getSize
public int getSize(int index)
index выходит за пределы (0 <= index < getSizes().length), поведение не определено.- Параметры:
-
index- индекс, соответствующий записи - Возвращает:
- размер записи
setSize
public void setSize(int index, int size)
index не попадает в диапазон: (0 <= index < getSizes().length), поведение не определено.- Параметры:
-
index- индекс, соответствующий записи -
size- размер записи
insertEntries
public void insertEntries(int start, int length, int value)
SizeSequence. Обратите внимание, что значения start и length должны удовлетворять следующим условиям: (0 <= start < getSizes().length)
AND (length >= 0). Если эти условия не выполнены, поведение не определено, и может быть выброшено исключение.- Параметры:
-
start- индекс, который будет назначен первой записи в группе -
length- количество записей в группе -
value- размер, который будет назначен каждой новой записи - Исключения:
-
ArrayIndexOutOfBoundsException- если параметры находятся вне диапазона: (0 <= start < (getSizes().length)) AND (length >= 0)
removeEntries
public void removeEntries(int start, int length)
SizeSequence. Обратите внимание, что значения start и length должны удовлетворять следующим условиям: (0 <= start < getSizes().length)
AND (length >= 0). Если эти условия не выполнены, поведение не определено, и может быть выброшено исключение.- Параметры:
-
start- индекс первой удаляемой записи -
length- количество удаляемых записей
© 1993, 2021, 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.
https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/javax/swing/SizeSequence.html