我正在寻找创建一个能够随时间改变大小的数组,因为数组的大小是不可预测的,我不想创建一个巨大的随机数,这将浪费内存所以每次按钮是按下我需要数组一个增长。
private String[][] lyricLineInfo = new String[x][5];
在x的位置,数组必须在按钮按下时增长,而5是常数。所以我需要x按钮一个一个地增长而不会溢出。我可以用这样的东西来做吗?
lyricLineInfo[lyricLineInfo.length + 1][4] = fieldLyrics.getText();
无论如何都要提前感谢!
答案 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