Класс 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 — число элементов в списке.
Две операции, время выполнения которых по-прежнему линейно зависит от числа элементов, — это методы insertEntries и removeEntries. Оба метода преобразуют внутренний массив в набор целочисленных размеров, копируют его в новый массив, а затем заново формируют гибридное представление на месте.
- Начиная с:
- 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://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/swing/SizeSequence.html