Spec-Zone.ru › OpenJDK 8

Класс SizeSequence

  • java.lang.Object
    • javax.swing.SizeSequence

public class SizeSequence
extends Object

Объект SizeSequence эффективно поддерживает упорядоченный список размеров и соответствующих позиций. Одна из ситуаций, в которой SizeSequence может быть уместна, — в компоненте, отображающем несколько строк разной высоты. В этом случае один объект SizeSequence может использоваться для отслеживания высот и вертикальных позиций всех строк.

Другой пример — многоколоночный компонент, например, JTable, в котором размеры столбцов не равны. Объект JTable может использовать один объект SizeSequence для хранения ширины и горизонтальных позиций всех столбцов. Объект JTable может затем использовать объект SizeSequence для поиска столбца, соответствующего определенной позиции. Объект JTable может обновлять объект SizeSequence всякий раз, когда изменяются размеры одного или нескольких столбцов.

На рисунке ниже показаны отношения между данными о размере и позиции для многоколоночного компонента.

The first item begins at position 0, the second at the position equal
 to the size of the previous item, and so on.

На рисунке первый индекс (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(int numEntries)

Создаёт новый объект SizeSequence с заданным количеством элементов, все с размером 0.

SizeSequence(int[] sizes)

Создаёт новый объект SizeSequence с указанными размерами.

SizeSequence(int numEntries, int value)

Создаёт новый объект SizeSequence с заданным количеством элементов, все с размером value.

Методы

Модификатор и тип Метод и описание
int getIndex(int position)

Возвращает индекс элемента, соответствующего заданной позиции.

int getPosition(int index)

Возвращает начальную позицию для указанного элемента.

int getSize(int index)

Возвращает размер указанного элемента.

int[] getSizes()

Возвращает размер всех элементов.

void insertEntries(int start, int length, int value)

Добавляет непрерывную группу элементов в этот объект SizeSequence.

void removeEntries(int start, int length)

Удаляет непрерывную группу элементов из этого объекта SizeSequence.

void setSize(int index, int size)

Устанавливает размер указанного элемента.

void setSizes(int[] sizes)

Сбрасывает этот объект SizeSequence, используя данные в аргументе 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API