Класс SizeSequence
- java.lang.Object
-
- javax.swing.SizeSequence
public class SizeSequence extends Object
Объект SizeSequence эффективно поддерживает упорядоченный список размеров и соответствующих позиций. Одна из ситуаций, в которой SizeSequence может быть уместна, — в компоненте, отображающем несколько строк разной высоты. В этом случае один объект SizeSequence может использоваться для отслеживания высот и вертикальных позиций всех строк.
Другой пример — многоколоночный компонент, например, JTable, в котором размеры столбцов не равны. Объект JTable может использовать один объект SizeSequence для хранения ширины и горизонтальных позиций всех столбцов. Объект 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(int numEntries) Создаёт новый объект |
SizeSequence(int[] sizes) Создаёт новый объект |
SizeSequence(int numEntries,
int value) Создаёт новый объект |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
int |
getIndex(int position) Возвращает индекс элемента, соответствующего заданной позиции. |
int |
getPosition(int index) Возвращает начальную позицию для указанного элемента. |
int |
getSize(int index) Возвращает размер указанного элемента. |
int[] |
getSizes() Возвращает размер всех элементов. |
void |
insertEntries(int start,
int length,
int value) Добавляет непрерывную группу элементов в этот объект |
void |
removeEntries(int start,
int length) Удаляет непрерывную группу элементов из этого объекта |
void |
setSize(int index,
int size) Устанавливает размер указанного элемента. |
void |
setSizes(int[] sizes) Сбрасывает этот объект |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
SizeSequence
public SizeSequence()
Создаёт новый объект SizeSequence без элементов. Для добавления элементов можно использовать insertEntries или setSizes.
- См. также:
-
insertEntries(int, int, int),setSizes(int[])
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, 2020, 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.