【问题标题】:How can i add elements to the middle of pre existing 2D Arrays in java?如何将元素添加到 java 中预先存在的 2D 数组的中间?
【发布时间】:2014-06-23 19:31:22
【问题描述】:

我有一个这样声明的数组列表:

ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>;

我已经用从文本文件中解析出来的字符串填充了内部数组列表。稍后我会将所有数组列表添加到数据库中。

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

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

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);
        }       
    }

在此示例中,行中的第一个元素是 IP 地址。我正在尝试将相同的确切 IP 地址添加到第二个元素并正确推送其余数据。 (将有两个相同的 IP 地址彼此相邻)。我计划稍后填充 IP 地址,但只是想先添加它。

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

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

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

【问题讨论】:

  • 加在中间让我觉得LinkedList在ArrayList之前。
  • 如果你需要一个排序列表,为什么不使用一个集合,比如 TreeSet?
  • @duffymo 我认为数组列表的“添加”功能会为我推送数据。我从未在 Java 中使用过 LinkedLists。你能解释一下为什么这是一个更好的选择吗? (或就此而言的树集)。
  • 顺便说一句:类型声明应该使用接口(List),而不是实现(ArrayList)。

标签: java arrays 2d


【解决方案1】:

看看LinkedList的this方法:

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

我认为这正是你所需要的。

还有一点:

<ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>;

有点奇怪。一定是

ArrayList<ArrayList<String> data = new ArrayList<ArrayList<String>>();

【讨论】:

  • 另外,我很确定你也有实例化内部数组列表。否则将为空。
  • @TimZ。当我填充数据时,我在那里实例化它。
  • 应该是List&lt;List&lt;String&gt;&gt; data = new ArrayList&lt;List&lt;String&gt;&gt;();
  • 大卫康拉德,是的,我同意。如果不需要任何特殊的 Collection Class 方法,最佳实践建议这样做。
【解决方案2】:

您的代码运行良好。对于Java 中的任何List 实现,方法add(int index, E element) 将在索引index 处插入元素E,并将所有内容向右移动。见http://docs.oracle.com/javase/7/docs/api/java/util/List.html#add%28int,%20E%29

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

正如上面的 cmets 中提到的,你应该尽量保持你的数据类型声明尽可能的抽象。将声明中的 ArrayList 声明替换为 List(见下文) 选择抽象类型List&lt;E&gt; 的适当实现取决于程序的性质。 Java 有 3 个值得注意的实现:ArrayList、LinkedList(实际上这是双向链表)和 Stack。

我在http://www.compileonline.com 测试了以下代码。 "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);
        }       
    }
}

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2023-04-02
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多