如何在java中向预先存在的2D数组中间添加元素?

如何在java中向预先存在的2D数组中间添加元素?,java,arrays,2d,Java,Arrays,2d,我有一个数组列表声明如下: ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>; ArrayList data=新的ArrayList; 我用从文本文件中解析出来的字符串填充了内部数组列表。稍后我将把所有数组列表添加到数据库中 在我第一次解析并将数据添加到内部数组列表之后,我想进入并添加在我正在解析的文件中找不到的其他数据 以下是我尝试过的代码,但它不起作用:

我有一个数组列表声明如下:

ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>;
ArrayList data=新的ArrayList;
我用从文本文件中解析出来的字符串填充了内部数组列表。稍后我将把所有数组列表添加到数据库中

在我第一次解析并将数据添加到内部数组列表之后,我想进入并添加在我正在解析的文件中找不到的其他数据

以下是我尝试过的代码,但它不起作用:

void SpecialOperations(ArrayList<ArrayList<String>> data) {
        for(ArrayList<String> sub: data){
            String ip = sub.get(0);
            //System.out.println(sub.get(0));
            sub.add(1,ip);
        }       
    }
void特殊表(ArrayList数据){
用于(ArrayList子:数据){
字符串ip=sub.get(0);
//System.out.println(sub.get(0));
子条款增补(1,ip);
}       
}
在本例中,行中的第一个元素是IP地址。我试图将相同的IP地址添加到第二个元素中,并将其余的数据推送到正确的位置。(将有两个相同的IP地址相邻)。我计划稍后填充IP地址,但只想先添加它

我知道,在我将2d ArrayList发送到“SpecialLoperations”之前,它已填充了有效数据,因为我可以循环遍历它并打印出正确的数据,因此我知道这不是空数据的问题

编辑:我以前没有为列表使用过数组列表以外的许多其他数据类型。我使用过哈希映射和树映射,但不太多。如果这不是正确的方法,您能解释一下我如何使用不同的方法吗

Edit2:自动链接的问题说我的问题已经被回答了,但它并没有回答我的问题。我知道如何添加到中间。我认为我如何实现2d ArrayList有问题。

看看LinkedList的方法:

在此列表中的指定位置插入指定元素。将元素当前移动到该位置

我想这正是你需要的

还有一件事:


您的代码运行良好。对于Java中的任何列表实现,方法
add(int-index,E-element)
将在索引
index
处插入元素E,并将所有元素向右移动。看

在此列表中的指定位置插入指定元素(可选操作)。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将一个元素添加到其索引)

如上所述,您应该尽量使数据类型声明保持抽象。替换要在声明中列出的ArrayList声明(请参见下文) 选择抽象类型
列表的适当实现取决于程序的性质。Java有3个值得注意的实现:ArrayList、LinkedList(实际上这是双链表)和Stack

我测试了下面的代码。在第一个内部arraylist的第一个位置插入了“insert”元素

public class Test {

    public static final List<ArrayList<String>> data = new ArrayList<ArrayList<String>>();

    public static void main(String[] args) {
        data.add(new ArrayList<String>());
        data.get(0).add("1");
        data.get(0).add("2");
        data.get(0).add("3");
        SpecialOperations(data);

        for (String x : data.get(0)) {
            System.out.println(x);
        }
    }

    static void SpecialOperations(List<ArrayList<String>> dat) {
        for(ArrayList<String> sub: dat){
            String ip = "ins";
            sub.add(1,ip);
        }       
    }
}
公共类测试{
公共静态最终列表数据=新ArrayList();
公共静态void main(字符串[]args){
add(newarraylist());
数据。获取(0)。添加(“1”);
数据。获取(0)。添加(“2”);
数据。获取(0)。添加(“3”);
特殊坡度(数据);
for(字符串x:data.get(0)){
系统输出println(x);
}
}
静态空隙特殊坡度(列表dat){
用于(ArrayList sub:dat){
字符串ip=“ins”;
子条款增补(1,ip);
}       
}
}

添加到中间,让我在ARLYLIST之前考虑链接列表。如果需要排序列表,为什么不使用一个集合,如TeSESET?可能的重复的“DuffyMo”,我认为数组列表的“添加”函数将数据推给我。我从未在Java中使用过LinkedList。你能解释一下为什么这是一个更好的选择吗?顺便说一句:类型声明应该使用接口(列表),而不是实现(ArrayList)。另外,我很确定您也有实例化内部ArrayList的方法。否则它将为空。@TimZ。当我填充数据时,我在那里实例化它ArrayList<ArrayList<String> data = new ArrayList<ArrayList<String>>();
public class Test {

    public static final List<ArrayList<String>> data = new ArrayList<ArrayList<String>>();

    public static void main(String[] args) {
        data.add(new ArrayList<String>());
        data.get(0).add("1");
        data.get(0).add("2");
        data.get(0).add("3");
        SpecialOperations(data);

        for (String x : data.get(0)) {
            System.out.println(x);
        }
    }

    static void SpecialOperations(List<ArrayList<String>> dat) {
        for(ArrayList<String> sub: dat){
            String ip = "ins";
            sub.add(1,ip);
        }       
    }
}