向String数组添加新行

时间:2015-02-05 05:00:30

标签: java

假设我有一个二维数组,例如String array[][] = {{"",""},{"",""}}并且此数组打印出新行中的每一行。

现在,我的问题是,如果用户希望通过Scanner输入添加一组新行来添加到此数组,我该怎么做呢?

例如,假设我有一个库存清单,我刚刚注意到一批新货到了。如何将此新库存添加到现有库存中。

  

我的想法是,如果我的阵列不够大,那么我将不得不制作一个新的,更大的阵列并将原始数据复制到那里。从这一点来说,我可以添加新数据。所以我认为一些for循环应该足够了。但我不知道如何在这里申请?

6 个答案:

答案 0 :(得分:2)

由于Java数组不是动态大小的数据结构,我建议您使用Collection(如List)(表示动态大小的数据结构的接口类型)。像,

List<List<String>> al = new ArrayList<>();
al.add(Arrays.asList("1", "2"));
al.add(Arrays.asList("3", "4"));
String str = "5, 6"; // <-- let's assume the user wants to add a 5 and 6
al.add(Arrays.asList(str.split(",\\s*")));
System.out.println(al);

输出

[[1, 2], [3, 4], [5, 6]]

注意与数组不同,ArrayListLinkedList都会覆盖toString()

答案 1 :(得分:1)

是的,您可以通过调用Arrays.copyOf方法然后将其重新分配给初始对象来增加数组的大小。但无论如何如果你不想一次又一次地复制ArrayList是一个更好的选择,因为它内部使用Arrays.copyOf来增加数组的大小,因为它在内部执行时会调用add (E e)as:

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

ensureCapacityInternal(size + 1)检查分配的默认容量的最大值,即10到大小+ 1:

private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
        minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }
    ensureExplicitCapacity(minCapacity);
}

如果调用容量超过ensureExplicitCapacity(minCapacity);,则会通过调用内部transient Object[]的{​​{1}}来增加grow()的容量。 希望这个解释有所帮助。

对于您的问题,您可以执行以下操作:

Arrays.copyOf

答案 2 :(得分:0)

阵列是固定大小的。除非每次都创建一个新数组,否则无法更改大小。

正确的方法是使用ArrayList

List<String> shipments = new ArrayList<String>();
shipments.add("newShipments");

我发现你的记录中有一个属性。您可以创建Shipment类。 (如果记录中需要多个字符串或变量,则可以按如下方式创建对象的arraylist:)

示例:

class Shipment
{
    //Place your attributes here..
    String name;
    String id;

    //Constructors and methods not shown
}

List<Shipment> records = new ArrayList<Shipment>();
records.add(new Shipment("Dresses", "A-123"));

//Having an arraylist of objects allows you to hold more than 1 variable.
//Now each `records` can hold 2 String variables `name` and `id`.

答案 3 :(得分:0)

您无法扩展阵列 - 需要将其复制到新阵列。幸运的是,有一种方法可以让您轻松实现:Arrays.copyOf

所以:

String[] names = {"Bill", "Bob"};
names = Arrays.copyOf(names, names.length + 1);
names[names.length - 1] = "Mary";

答案 4 :(得分:0)

  

案例1:使用数组

假设

String array[][] = {{"oldinventory1","oldinventory2"},{"oldinventory3","oldinventory4"}};

并且您希望在2执行

时插入新广告资源
array[2][2]="newinventory1";

由于数组中没有2索引,因此数组索引会超出绑定范围,因为数组行和列在第一个中是固定的。

ARRAY DEMO

  

案例2:使用列表

您可以使用List删除arraysize问题。通过在@Elliott Frisch的示例中声明List中的List,还有一个优势:

         List<List<String>> al = new ArrayList<>();
         al.add(Arrays.asList("oldinventory1", "oldinventory2"));
         al.add(Arrays.asList("oldinventory3", "oldinventory4"));
         String str = "newinventory5, newinventory6,, newinventory6";

即不仅我们可以动态增加行,而且我们可以添加新列。因此,如果您在3到5或1之间的任何时候增加库存,您就可以轻松处理。

LIST DEMO

答案 5 :(得分:0)

数组的大小是固定的,因此您需要将数组复制到更大的数组。您可以使用Arrays.copyOf()制作副本。

这是使用带有多维数组的copyOf方法的一个示例。

    String[][] array = {{"A", "B"},{"C", "D"}};
    String[] newValuesArray = {"E", "F"};
    array = Arrays.copyOf(array, array.length + 1);
    array[array.length - 1] = newValuesArray;