我们如何将Arrays和ArrayLists一起使用(如果可能的话)?
我想将一些字符串存储到ArrayList中,稍后将它们解析出来,将它们解析为String数组,将这些数组存储在ArrayList中,以后能够从ArrayLists中检索数据......
查看此代码,并随意将我分开进行糟糕的编码;自从我使用Java以来已经有一段时间了。
public static void parseData() throws IOException
{
//for reference, nonParsedData is ArrayList<String>
// while parsedData is ArrayList<String[]>
String line = new String();
String[] tempContainer = new String[7];
Scanner keyboard = new Scanner(System.in);
for (int x = 0; x < nonParsedData.size(); x++)
{
line = nonParsedData.get(x);
//filling the temporary container to place into the ArrayList of arrays
tempContainer[0] = line.substring(0,1); //Data piece 1
tempContainer[1] = line.substring(1,3); //Data piece 2
tempContainer[2] = line.substring(3,7); //Data piece 3
tempContainer[3] = line.substring(7,8); //Data piece 4
tempContainer[4] = line.substring(8,9); //Data piece 5
tempContainer[5] = line.substring(9,10); //Data piece 6
tempContainer[6] = line.substring(10,(line.length() - 1)); //Data piece 7
parsedData.add(tempContainer);
}
}
所以在之前的版本中,我已将一些外部文件转储到nonParsedData
。它是一堆字符串。没什么大不了。我拿这些字符串,读取它们,将它们放入数组中。 Hunky dory。这很好。
这是检索过程,这使我中风。
public static void fetchAndPrint() throws IOException
{
String[] tempContainer = new String[7];
for(int x = 0; x < parsedData.size(); x++)
{
tempContainer = parsedData.get(x); //this should be assigning my stored array to
//the tempContainer array (I think)
//let's try deepToString (that didn't work)
//System.out.println((parsedData.get(x)).toString()); //just a debugging check
System.out.println(x);
System.out.println(tempContainer[0] + " " + tempContainer[1] + " "
+ tempContainer[2] + " " + tempContainer[3] + " "
+ tempContainer[4] + " " + tempContainer[5] + " "
+ tempContainer[6] + " ");
}
}
执行此操作后,只有一个输出显示在初始ArrayList<String[]>
- 三次!我在循环中遗漏了什么吗?当我真的没有这个功能时,我是否从ArrayList
实现数组?我是否错误地将值分配给数组?请ArrayList
甚至会给我一个实际的数组 - 或者它只是一个像{1,2,3等}的列表?这些事情甚至有所不同吗?
最后,我知道这可以使用数据库语言来实现,但我们假设我想坚持使用Java。
答案 0 :(得分:1)
我会保持简单并回答你的问题:
arraylists和数组如何在java中相互交互?
首先,我们必须区分两者。
虽然 数组 (即tempContainer [])只是连续内存中类似数据(基元或对象)的集合,但 ArrayLists 是具有字段和成员函数的对象。
回到你的问题。要从 数组 转换为 ArrayList :
String[] names = {"Bobby", "Earl", "Super Mario"};
ArrayList<String> namesList = new ArrayList<String>();
// First we must return the array as a List using Arrays.asList()
// Then use the addAll() method provided by the ArrayList class.
namesList.addAll(Arrays.asList(names));
现在正好相反,将 ArrayList 的内容返回到 数组 :
String[] names;
ArrayList<String> namesList = new ArrayList<String>();
//All that is needed is the ArrayList member method toArray().
names = namesList.toArray();
我希望这有帮助!
答案 1 :(得分:0)
由于tempContainer
的范围,您会覆盖您的值:
String[] tempContainer = new String[7];
for (int x = 0; x < nonParsedData.size(); x++)
{
line = nonParsedData.get(x);
//filling the temporary container to place into the ArrayList of arrays
tempContainer[0] = line.substring(0,1);
// ...
parsedData.add(tempContainer); // <=== this is always the same array
}
你可能想要的是每个迭代的全新数组,如下所示:
for (int x = 0; x < nonParsedData.size(); x++)
{
String[] tempContainer = new String[7];
// fill tempContainer
parsedData.add(tempContainer);
作为旁注,您可能希望在此处使用对象:
Part
)ArrayList<Part>
parsedData