繁体   English   中英

Java-创建未定义的数组

[英]Java - Creating an Undefined Array

我正在寻找一个能够随着时间改变大小的数组,因为该数组的大小是不可预测的,并且我不想创建一个巨大的随机数,这会浪费内存,因此每次按下按钮时我都需要数组增加一。

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

在x位置是数组必须在按下按钮时增长的位置,而5是常数。 因此,我需要x按钮增加一个而不溢出。 我可以使用类似的方法吗?

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

无论如何要先谢谢!

使用ArrayList<String[]> (请参阅此处的文档)。 它将自动增长。 (它使用一个内部数组,当需要增长时,内部数组实际上并不会仅增长1。由于增长是一项昂贵的操作,它会增长更大的数量,因此可以吸收更多的物品,而不必再次增长。)

编辑

例如,这是重新编码原始帖子的两行的方法:

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的ArrayLists:

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"

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

使用这样的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

改用列表:

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

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

lyricLineInfo.add(new String[5]);

并帮助您:

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

如果需要大小不确定的数组,为什么不考虑使用Collections? :)

您不能使用数组来执行此操作,但是可以使用List对象。 您可以尝试这样的事情:

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

因此,假设fieldLyrics.getText()返回String [],您将执行以下操作:

lyricLineInfo.add(fieldLyrics.getText());

如果仅添加新元素并遍历列表中的所有元素,则应改用LinkedList

集合在Java中大量使用。 您应该检查Java Collections Framework-教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM