java ArrayList和LinkedList添加

java ArrayList和LinkedList添加,java,arraylist,linked-list,Java,Arraylist,Linked List,您好,我在ArrayList和LinkedList中的索引上添加元素时遇到问题。我不知道怎么做 我有这个ArrayList类,我必须在索引上添加元素,但我不知道怎么做。(ArrayList和linkedList中的this->public void add(Object-element,int-index) 公共类ArrayList实现列表{ 私有对象[]元素=新对象[0]; @凌驾 公共void添加(对象元素){ Object[]newElements=新对象[elements.length+

您好,我在ArrayList和LinkedList中的索引上添加元素时遇到问题。我不知道怎么做

我有这个ArrayList类,我必须在索引上添加元素,但我不知道怎么做。(ArrayList和linkedList中的this->public void add(Object-element,int-index)

公共类ArrayList实现列表{
私有对象[]元素=新对象[0];
@凌驾
公共void添加(对象元素){
Object[]newElements=新对象[elements.length+1];
copyArrayElements(元素,0,新元素,0,元素.长度);
新元素[newElements.length-1]=元素;
元素=新元素;
//内穆塞洛·贝特·艾德阿尔尼的《výkonově
}
@凌驾
公共void添加(对象元素,int索引){
}
@凌驾
公共无效删除(整型索引){
if(索引<0 | |索引>=elements.length){
抛出新的IndexOutOfBoundsException();
}
Object[]newElements=新对象[elements.length-1];
copyArrayElements(元素,0,新元素,0,索引);
copyArrayElements(elements,index+1,newElements,index,elements.length-index-1);
元素=新元素;
}
@凌驾
公共对象get(int索引){
if(索引<0 | |索引>=elements.length){
抛出新的IndexOutOfBoundsException();
}
返回元素[索引];
}
@凌驾
公共整数大小(){
返回元素长度;
}
私有void copyrarayElements(对象[]src,int srcPos,对象[]dest,int destPos,int length){
for(int i=0;i
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;
        }

    }

}
公共类LinkedList实现列表{
私有节点优先;
私人内部规模;//阿比·斯维利科斯·内穆塞拉·多波西塔瓦,tj.普罗查泽·塞兹南
@凌驾
公共void添加(对象元素){
if(first==null){
第一个=新节点(元素,空);
}否则{
节点=第一个;
while(node.next!=null){
node=node.next;
}
node.next=新节点(元素,空);
}
大小++;
}
@凌驾
公共void添加(对象元素,int索引){
}
@凌驾
公共无效删除(整型索引){
如果(索引<0 | |索引>=大小){
抛出新的IndexOutOfBoundsException();
}
如果(索引==0){
first=first.next;
}否则{
节点=第一个;
对于(int i=0;i=大小){
抛出新的IndexOutOfBoundsException();
}
节点=第一个;
对于(int i=0;i

谢谢您的帮助。

您可以将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);

    }

}
import java.util.ArrayList;
导入java.util.List;
公共类ArrayListRunner{
公共静态void main(字符串[]args){
列表=新的ArrayList();
//在列表末尾插入
添加(“苹果”);
添加(“香蕉”);
//列表中的项目:[苹果、香蕉]
//基于索引的插入
列表。添加(0,“橙色”);
增加(1,“芒果”);
//清单中的项目:[橘子、芒果、苹果、香蕉]
系统输出打印项次(列表);
}
}
类似的方法也适用于链表

Java文档参考:

是的,但我必须像这些类别中的其他方法一样深入地编写该方法,而这正是我不能做的。对于ArrayList,将添加点处和之后的所有元素移动一次,从末尾开始,一直移动到添加点。然后在添加点插入元素。对于LinkedList,在添加点断开链接,添加元素,然后在索引-1、索引和索引+1处的元素之间重新建立链接。
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);

    }

}