java ArrayList и LinkedList добавить - PullRequest
0 голосов
/ 29 марта 2020

Привет, у меня проблема с добавлением элемента в индекс в 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;
        }

    }

}

Спасибо за помощь.

1 Ответ

0 голосов
/ 29 марта 2020

Вы можете вставлять элементы в 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 До c Ссылка: 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

...