Класс 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. Оба метода преобразуют внутренний массив в набор целочисленных размеров, копируют его в новый массив, а затем заново формируют гибридное представление на месте.
- Начиная с:
- 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. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого объекта Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Будит один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Будит все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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.