Привет, у меня проблема с добавлением элемента в индекс в ArrayList и LinkedList. Я не знаю, как это сделать.
У меня есть этот класс ArrayList, и я должен добавить элемент в индекс, и я не знаю, как. (This -> publi c void add (Object element, int index) и в arrayList, и в LinkList)
public class ArrayList implements List {
private Object[] elements = new Object[0];
@Override
public void add(Object element) {
Object[] newElements = new Object[elements.length + 1];
copyArrayElements(elements, 0, newElements, 0, elements.length);
newElements[newElements.length - 1] = element;
elements = newElements;
// výkonově by nemuselo být ideální
}
@Override
public void add(Object element, int index) {
}
@Override
public void remove(int index) {
if (index < 0 || index >= elements.length) {
throw new IndexOutOfBoundsException();
}
Object[] newElements = new Object[elements.length - 1];
copyArrayElements(elements, 0, newElements, 0, index);
copyArrayElements(elements, index + 1, newElements, index, elements.length - index - 1);
elements = newElements;
}
@Override
public Object get(int index) {
if (index < 0 || index >= elements.length) {
throw new IndexOutOfBoundsException();
}
return elements[index];
}
@Override
public int size() {
return elements.length;
}
private void copyArrayElements(Object[] src, int srcPos, Object[] dest, int destPos, int length) {
for (int i = 0; i < length; i++) {
dest[destPos + i] = src[srcPos + i];
}
} // System.arraycopy(src, srcPos, dest, destPos, length);
}
и аналогичные проблемы в LinkedList.
public class LinkedList implements List {
private Node first;
private int size; // aby se velikost nemusela vždy dopočítávat, tj. procházet celý seznam
@Override
public void add(Object element) {
if (first == null) {
first = new Node(element, null);
} else {
Node node = first;
while (node.next != null) {
node = node.next;
}
node.next = new Node(element, null);
}
size++;
}
@Override
public void add(Object element, int index) {
}
@Override
public void remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
if (index == 0) {
first = first.next;
} else {
Node node = first;
for (int i = 0; i < index - 1; i++) {
node = node.next;
}
node.next = node.next.next;
}
size--;
}
@Override
public Object get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
Node node = first;
for (int i = 0; i < index; i++){
node = node.next;
}
return node.item;
}
@Override
public int size() {
return size;
}
private class Node {
private Object item;
private Node next;
Node(Object item, Node next) {
this.item = item;
this.next = next;
}
}
}
Спасибо за помощь.