Кода -копия выглядит следующим образом:
импортировать java.util.arrays;
/**
* Реализация последовательных линейных таблиц
*/
Public Class Linelist <e> {
Частный int size; // длина
Частный объект [] Array; // Основной массив
private final int default_length = 16; // Длина по умолчанию
/**
* Метод непараметрического строительства
*/
public linelist () {
размер = 0;
// построить массив, используя длину по умолчанию
Array = новый объект [default_length];
}
/**
* Укажите длину для строительства
* @param Длина укажите начальную длину
*/
public linelist (int length) {
if (длина <0) {
Бросьте новое allogalargumentException («начальная длина незаконна:»+длина);
}
// построить массив с указанной длиной
Array = новый объект [длина];
}
/**
* Укажите элемент и длину инициализации для построения
* @param element инициализируйте элемент
* @param длины инициализации
*/
Public Linelist (E Element, Int Length) {
if (длина <1) {
Бросьте новое allogalargumentException («начальная длина незаконна:»+длина);
}
// построить массив с указанной длиной
Array = новый объект [длина];
// Инициализировать первый элемент
массив [0] = элемент;
размер ++;
}
/**
* Укажите элементы инициализации для строительства
* @param element инициализируйте элемент
*/
Public Linelist (E Element) {
// Инициализировать массив с длиной по умолчанию
Array = новый объект [default_length];
// Инициализировать первый элемент
массив [0] = элемент;
}
/**
* Получите количество элементов
*/
public int size () {
возвратный размер;
}
/**
* Определите, пусто ли это
*/
public boolean isempty () {
вернуть размер == 0;
}
/**
* Определите, включен ли этот элемент
*/
Public Boolean содержит (E E) {
if (indexof (e) == -1) {
вернуть ложь;
}
вернуть истину;
}
/**
* Формат как массив
*/
public Object [] toarray () {
return Arrays.copyof (массив, размер);
}
/**
* Добавьте элемент в хвост линейной таблицы
* @param e
* @возвращаться
*/
public void add (e e) {
extendcapacity (размер+1);
массив [размер] = e;
размер ++;
}
/**
* Расширить емкость
* @param длиной требуемой длины
*/
private void extendCapacity (int length) {
// текущая длина массива и требуемая длина должны быть максимальными
int mincapacity = math.max (array.length, длина);
// Требуется ли расширение емкости
if (mincapacity - array.length> 0) {
// длина массива увеличивается наполовину
int newlength = array.length + array.length/2;
// Если новая длина меньше требования, используйте требуемую длину в качестве длины массива
if (newlength <mincapacity) {
newlength = mincapacity;
}
// длина массива не может превышать integer.max_value
if (newlength> integer.max_value - 8) {
newlength = integer.max_value;
}
// расширение массива
array = arrays.copyof (array, newlength);
}
}
/**
* Удалить весь этот элемент из линейной таблицы
* @param E Элементы, которые необходимо удалить
* @возвращаться
*/
public void Removeall (e e) {
if (e == null) {
для (int i = 0; i <size; i ++) {
if (array [i] == null) {
Fastremove (i);
}
}
}еще{
для (int i = 0; i <size; i ++) {
if (e.equals (array [i])) {
Fastremove (i);
}
}
}
}
/**
* Удалить элемент в индексе и перенести следующие элементы вперед по очереди
* @param индекс индекс, который необходимо удалить
*/
private void fastremove (int index) {
if (size-index-1> 0) {
// массивы начинаются с индекса+1 и все движутся вперед
System.ArrayCopy (массив, индекс+1, массив, индекс, размер-1);
}
//, пожалуйста, опустошите последний элемент
массив [-размер] = null;
}
/**
* Очистить линейную таблицу
*/
public void clear () {
// заполнить все массивы в нуль
Arrays.fill (Array, NULL);
// Измените количество элементов на 0
размер = 0;
}
/**
* Получите элемент в индексе
* @param index
* @return Element в индексе
*/
@Suppresswarnings ("не контролировано")
public E Get (int index) {
CheckIndex (index);
вернуть (e) массив [index];
}
/**
* Убедитесь, что индекс вышел за пределы
* @param index
*/
private void checkindex (int index) {
if (index> = size || index <0) {
бросить новый indexoutofboundsexception ("indexoutboundsexception");
}
}
/**
* Измените элемент в индексе в новый элемент
* @param индекс индекса
* @param element
* @return Element в исходном индексе
*/
@Suppresswarnings ("не контролировано")
public E set (int index, e element) {
CheckIndex (index);
E e = (e) массив [индекс];
массив [index] = element;
вернуть E;
}
/**
* Вставьте указанный элемент в указанный индекс
* @param индекс индекса
* @param element
*/
public void add (int index, e element) {
// Проверьте индекс
CheckIndex (index);
// необходимо ли расширить емкость
extendcapacity (размер+1);
// скопировать массив
System.ArrayCopy (массив, индекс, массив, индекс+1, Zize-Index);
массив [index] = element;
}
/**
* Удалите элементы в индексе
* @param индекс индекса
* @return удаленные элементы
*/
@Suppresswarnings ("не контролировано")
public E удалить (int index) {
CheckIndex (index);
// Получить элемент позиции индекса
E e = (e) массив [индекс];
fastremove (index);
вернуть E;
}
/**
* Получите индекс местоположения, где появляется элемент сначала
* @param e Элемент, чтобы найти
* @return, если это -1, это означает, что линейная таблица не имеет этого элемента
*/
public int indexof (e e) {
if (e == null) {
для (int i = 0; i <size; i ++) {
if (e == array [i]) {
вернуть я;
}
}
}
для (int i = 0; i <size; i ++) {
if (e.equals (array [i])) {
вернуть я;
}
}
возврат -1;
}
/**
* Получите индекс последнего появления элемента
* @param e Элемент, чтобы найти
* @return, если это -1, это означает, что линейная таблица не имеет этого элемента
*/
public int lastindexof (e e) {
// судить, является ли элемент нулевым
if (e == null) {
для (int i = size-1; i> = 0; i-) {
if (e == array [i]) {
вернуть я;
}
}
}
для (int i = size-1; i> = 0; i-) {
// Если здесь будет запуститься исключение Nullpoint
// Итак, вам нужно добавить проверку, будь то NULL
if (e.equals (array [i])) {
вернуть я;
}
}
возврат -1;
}
/**
* Перехватывает линейную таблицу
* @param fromindex start indexing
* @param toindex end index
* @return перехваченная линейная таблица
*/
@Suppresswarnings ("не контролировано")
Public Linelist <e> Sublist (int fromindex, int toindex) {
// Судите, не вышел ли начальный индекс за пределами границ
if (fromindex <0 || fromindex> = size) {
бросить новый indexoutofboundsexception ("Start Index Cross Rader:"+fromIndex);
}
// Судите, вышел ли конечный индекс за пределами границ
if (toindex> = size || fromindex <0) {
бросить новый indexoutofboundsexception ("end index outbound:"+toindex);
}
// судить, являются ли индекс начала и конечный индекс правильным
if (fromindex> toindex) {
Выбросить новое allosalargumentException («параметр неверный, начальный индекс должен быть больше или равен конечному индексу»);
}
Linelist <e> list = new Linelist <e> ();
for (int i = fromindex, j = toindex; i <= j; i ++) {
list.add ((e) массив [i]);
}
вернуть список;
}
}