Класс SizeSequence
public class SizeSequence extends Object
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, 2023, 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/21/docs/api/java.desktop/javax/swing/SizeSequence.html