Класс SizeSequence
public class SizeSequence extends Object
SizeSequence эффективно поддерживает упорядоченный список размеров и соответствующих позиций. Одна из ситуаций, в которой SizeSequence может быть уместным, — это компонент, отображающий несколько строк разной высоты. В этом случае один объект SizeSequence может использоваться для отслеживания высот и Y-позиций всех строк. Другой пример — многоколоночный компонент, такой как JTable, в котором размеры столбцов не равны. Объект JTable может использовать один объект SizeSequence для хранения ширин и X-позиций всех столбцов. Объект JTable может затем использовать объект SizeSequence для поиска столбца, соответствующего определённой позиции. Объект JTable может обновлять объект 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, используя данные в аргументе sizes. |
Подробное описание конструкторов
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, 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/swing/SizeSequence.html