Java - 创建未定义的数组

时间:2011-12-05 22:33:04

标签: java arrays undefined

我正在寻找创建一个能够随时间改变大小的数组,因为数组的大小是不可预测的,我不想创建一个巨大的随机数,这将浪费内存所以每次按钮是按下我需要数组一个增长。

private String[][] lyricLineInfo = new String[x][5];

在x的位置,数组必须在按钮按下时增长,而5是常数。所以我需要x按钮一个一个地增长而不会溢出。我可以用这样的东西来做吗?

lyricLineInfo[lyricLineInfo.length + 1][4] = fieldLyrics.getText();

无论如何都要提前感谢!

7 个答案:

答案 0 :(得分:7)

使用ArrayList<String[]>(请参阅文档here)。它会自动增长。 (它使用的内部数组在需要增长时实际上不会增长1。由于增长是一项昂贵的操作,它会增加一些更大的数量,因此它可以在再次生长之前吸收更多的物品。)< / p>

修改

例如,以下是您如何重新编写原始帖子的两行:

private ArrayList<String[]> lyricLineInfo = new ArrayList<String[]>();

lyricLineInfo.add(fieldLyrics.getText());

第二行假定fieldLyrics.getText()返回String[]。如果我误解了你的意图并且它返回了一个String,那么你可以执行以下操作:

String[] nextStrings = new String[5];
nextStrings[4] = fieldLyrics.getText();
lyricLineInfo.add(nextStrings);

如果第二个索引不总是5长,您还可以拥有ArrayLists的ArrayList:

private ArrayList<ArrayList<String>> lyricLineInfo
    = new ArrayList<ArrayList<String>>();

然后你可以lyricLineInfo.add(new ArrayList<String>());扩展数组。

编辑2

@ clankfan1 - 在您的评论中,您询问了如何进行特定操作。假设我们正在使用ArrayList<ArrayList<String>>结构。它会是这样的:

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

ArrayList<String> line = new ArrayList<String>();
line.add("true");
line.add("true");
line.add("0.0");
line.add("5.0");
line.add("First Line");
lyricLineInfo.add(line);
line = new ArrayList<String>(); // don't use clear(): need a new object here
line.add("false");
line.add("false");
line.add("5.0");
line.add("10.0");
line.add("Second Line");
lyricLineInfo.add(line);

String secondLineTitle = lyricLineInfo.get(1).get(4); // will be "Second Line"

显然,这种逻辑可以用于单独的方法。

编辑3

如果您需要lyricLineInfo的元素属于String[]类型,则每个元素都必须是不同的数组。以下是一些添加元素的编码样式:

ArrayList<String[]> lyricLineInfo = new ArrayList<String[]>();

String[] line = { "true", "true", "0.0", "5.0", "First Line" };
lyricLineInfo.add(line);
// now for a second style:
line = new String[5];
line[0] = "false";
line[1] = "false";
line[2] = "5.0";
line[3] = "10.0";
line[4] = "Second Line";
lyricLineInfo.add(line);
// and a third style:
lyricLineInfo.add(new String[] {
    "false", "true", "10.0", "15.0", "Third Line"
});

String secondLineTitle = lyricLineInfo.get(1)[4]; // will be "Second Line"

答案 1 :(得分:0)

您可以使用java.util.Vector<String[]>

答案 2 :(得分:0)

像这样使用ArrayList

private ArrayList<ArrayList<String>> lyricLineInfo = new ArrayList<ArrayList<String>>();

ArrayList是java中的灵活数组。当你想添加一些东西时:

lyricLineInfo.add(stringToBeAdded, index) //for the first dimension and
lyricLineInfo.get(firstIndex).add(stringToBeAdded, index); //for the second dimension

答案 3 :(得分:0)

改为使用列表:

private List<String[]> lyricLineInfo = new ArrayList<String[]>();

然后添加到您使用的列表中:

lyricLineInfo.add(new String[5]);

让你做到:

// Get the 3rd element (array index 2).
String[] strings = lyricLineInfo.get(2);

答案 4 :(得分:0)

如果您需要一个未定义大小的数组,为什么不考虑使用Collections? :)

答案 5 :(得分:0)

您无法使用数组执行此操作,但可以使用List对象。你可以尝试这样的事情:

private List<String[]> lyricLineInfo = new ArrayList<String[]>();

那么,假设fieldLyrics.getText()返回一个String [],你会这样做:

lyricLineInfo.add(fieldLyrics.getText());

答案 6 :(得分:0)

如果您只添加新元素并迭代列表中的所有元素,则应使用LinkedList代替。

Java中大量使用集合。您应该查看Java Collections Framework - tutorial