Hi i have problem with add Element on index in ArrayList and LinkedList. I dont know how to done it.
I have this ArrayList class and i must do add element on index and i dont know how.(this ->public void add(Object element, int index) in both arrayList and linkedList)
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);
}
and similar problem on 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;
}
}
}
Thanks for help.
You can insert elements to ArrayList to the index position or directly at the end of the list.
Sample Code:
import java.util.ArrayList;
import java.util.List;
public class ArrayListRunner {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
// Insert at the end of the list
list.add("Apple");
list.add("Banana");
//Items in List: [Apple, Banana]
// Index based insert
list.add(0,"Orange");
list.add(1,"Mango");
//Items in List: [Orange, Mango, Apple, Banana]
System.out.println(list);
}
}
Similar way applies to Linked List as well.
Java Doc Reference: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/ArrayList.html https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/LinkedList.html
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.