[英]Try to create a 2D ArrayList in Java
我正在嘗試讀取文件。 我想將文件的內容存儲在2D arraylist中,其中列表中的每個位置都包含一個字符。 我想要它,以便原始文本文件中的每一行都是數組列表中的一行。 例如,如果文本文件的輸入為:
a,b,c
d,e,f
g,h,i
那么該數組希望看起來像:{[a,b,c],[d,e,f],[g,h,i]}。 不幸的是,目前我的結果只是[a,b,c,d,e,f,g,h,i]。 任何想法將不勝感激,我是Java新手。 謝謝。
import java.util.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Coursework1
{
public static void main(String[] args)
{
try {
List<String> list = new ArrayList<String>();
String thisLine = null;
BufferedReader br;
br = new BufferedReader(new FileReader("map.txt"));
while ((thisLine = br.readLine()) != null) {
list.add(thisLine);
}
char[][] firstDimension = new char[list.size()][];
for (int i = 0; i < list.size(); i++) {
firstDimension[i] = list.get(i).toCharArray();
}
for (int i=0;i<firstDimension.length;i++) {
for (int j=0;j<firstDimension[i].length;j++) {
System.out.println(firstDimension[i][j]);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
您的答案實際上是正確的,並且功能正常。 您的測試代碼是錯誤的,因為它放入了太多新行。
for (int i=0;i<firstDimension.length;i++)
{
System.out.println();
for (int j=0;j<firstDimension[i].length;j++)
{
System.out.print(firstDimension[i][j]);
}
}
似乎您還沒有完全理解數組和數組列表之間的區別。
數組是一個包含固定數量的單一類型值的容器對象。 創建數組時將確定數組的長度。 創建后,其長度是固定的。 因此,在創建尺寸之前必須知道尺寸,或者必須創建足夠大的尺寸。
另一方面, ArrayList是一個集合(復雜類型,請參閱本教程以獲取更多信息),它可以容納簡單的對象,集合等。ArrayList可以想象成一個動態數組-您不必知道初始大小,如果您添加或刪除元素,它會自動調整大小。
像這樣遍歷ArrayList是一個好習慣
List<String> names = new ArrayList<String>();
// add something
// foreach loop
for (String name : names) {
// here you have access directly to the value
// and you don't have to write list.get(index)
System.out.println(name);
}
現在向您提問。 如果您閱讀上面的鏈接,則應該可以自己構建它。 但是,如果您仍然不知道:
List<List<String>> twoDimensionList = new ArrayList<List<String>>();
使用foreach循環進行迭代
for (List<String> innerList : twoDimensionList) {
for (String value : innerList) {
...
}
}
您可以將列表嵌入列表中,例如:
List<List<String>> matrix = new ArrayList<List<String>>();
然后訪問您想要的元素,
matrix.get(1).get(2);
編輯:我也建議您考慮更多是否需要Array或ArrayList 。 他們不一樣。 數組列表是可調整大小的(您可以不斷向其添加更多元素,而不必強迫數組列表中只包含這么多元素。這使您可以執行類似List<List<String>>
對象的操作其中不是每個第二維都具有相同的長度。另一方面,數組具有與之相關的特定大小,這使您能夠強制所有行具有相同的長度,並且所有列具有相同的高度...
您的代碼有效,只是錯誤地輸出了結果。 嘗試:
for (int i = 0; i < firstDimension.length; i++)
{
for (int j = 0; j < firstDimension[i].length; j++)
{
System.out.print(firstDimension[i][j]);
}
System.out.println();
}
這將從同一行上的字符打印出來,好吧,在同一行上...
每行(字符串)已經是一個字符列表,這些字符帶有使您可以對其進行迭代的方法(長度,charAt)。 因此,取決於您要實現的字符串列表,可能就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.