[英]java ArrayList and LinkedList add
嗨,我在 ArrayList 和 LinkedList 中的索引上添加元素時遇到問題。 我不知道怎么做。
我有這個 ArrayList 類,我必須在索引上添加元素,但我不知道如何。(this ->public void add(Object element, int index) in both arrayList 和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);
}
和 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;
}
}
}
感謝幫助。
您可以將元素插入到 ArrayList 的索引位置或直接插入列表的末尾。
示例代碼:
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);
}
}
類似的方式也適用於鏈表。
Java 文檔參考: 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.