cla*_*an1 1 java arrays undefined
我正在寻找创建一个能够随时间改变大小的数组,因为数组的大小是不可预测的,我不想创建一个巨大的随机数,这将浪费内存所以每次按下按钮我需要数组增长一个.
private String[][] lyricLineInfo = new String[x][5];
Run Code Online (Sandbox Code Playgroud)
在x的位置,数组必须在按钮按下时增长,而5是常数.所以我需要x按钮一个一个地增长而不会溢出.我可以通过使用这样的东西来做到这一点吗?
lyricLineInfo[lyricLineInfo.length + 1][4] = fieldLyrics.getText();
Run Code Online (Sandbox Code Playgroud)
无论如何,提前谢谢!
使用ArrayList<String[]>(请参阅此处的文档).它会自动增长.(它使用的内部数组在需要增长时实际上不会增长1.由于增长是一项昂贵的操作,它会增加一些较大的数量,因此它可以在再次生长之前吸收更多的物品.)
编辑
例如,以下是如何重新编写原始帖子的两行:
private ArrayList<String[]> lyricLineInfo = new ArrayList<String[]>();
lyricLineInfo.add(fieldLyrics.getText());
Run Code Online (Sandbox Code Playgroud)
第二行假设fieldLyrics.getText()返回a String[].如果我误解了你的意图并返回一个字符串,那么你可以做以下事情:
String[] nextStrings = new String[5];
nextStrings[4] = fieldLyrics.getText();
lyricLineInfo.add(nextStrings);
Run Code Online (Sandbox Code Playgroud)
如果第二个索引不总是5长,您还可以拥有ArrayLists的ArrayList:
private ArrayList<ArrayList<String>> lyricLineInfo
= new ArrayList<ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)
然后你可以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"
Run Code Online (Sandbox Code Playgroud)
显然,这种逻辑可以用于单独的方法.
编辑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"
Run Code Online (Sandbox Code Playgroud)