在Java中初始化可变数量的ArrayLists

时间:2016-01-25 17:09:14

标签: java arraylist

我想使用Eclipse制作动态程序。对于这个程序,我需要定义几个(实际上太多~200个)集合。我研究过并发现我可以使用ArrayLists来存储整数。

在我试图解决的问题中,有T(T是任何整数)我需要创建许多不同的ArrayLists。我需要为T的每个值定义一个唯一的ArrayList。例如,对于T = 3,我需要定义三个不同的ArrayLists,我将能够为每个不同的索引存储整数:

ArrayList T1 = new ArrayList();

ArrayList T2 = new ArrayList();

ArrayList T3 = new ArrayList();

这里的问题是我对如何定义与T一样多的ArrayLists无能为力。我试图创建一个“for循环”以初始化这些变量,但正如我预期的那样结果并不好(只是因为我需要为每个ArrayList使用不同的名称而且我无法改变每个ArrayList的名称)我确信它不会起作用(或者至少我确信我做错了,即使有办法做到这一点 - 我在互联网上搜索找不到的东西)但只是想知道我想要做什么,代码看起来像这样:

for (int i=1; i<T; i++) {
    ArrayList T+i = new ArrayList(); //I tried to vary the name of the arraylist by adding the variable "i" next to T.
}

在上面的代码中,我无法实现为ArrayLists定义索引,但请注意,如果我们可以通过向ArrayLists添加索引来实现这一目的,那将非常方便。

由于这是我对动态编程的第一次尝试,我有点失落,我感谢您的所有帮助!提前谢谢。

5 个答案:

答案 0 :(得分:1)

您的问题的解决方案之一是创建ArrayLists的ArrayList。如,

ArrayList<ArrayList<Integer>> listOfLists = new ArrayList<>(); 

但是,如果您使用较旧的JDK,则可能需要使用:

ArrayList<ArrayList<Integer>> listOfLists = new ArrayList<ArrayList<>>();

然后你可以在必要时初始化它们:

for (int i=0; i<T; i++) {
    listOfLists.add(new ArrayList()); 
}

并使用它们:

ArrayList<Integer> firstList = listOfLists.get(0);

对于多维arraylist

HashMap<Integer, ArrayList<ArrayList<Integer>>> map = new HashMap<>();
for (int i=0; i<T; i++) {
    map.put(i, new ArrayList<ArrayList<Integer>>()); 
}
ArrayList<ArrayList<Integer>> tempList = map.get(0);
}

我希望有所帮助。

答案 1 :(得分:0)

如果我理解正确,您需要一个列表列表,例如:

int T = 10;
ArrayList<ArrayList<Integer>> array = new ArrayList<>(T);
for(int i = 0; i < T;i++){
        array.add(new ArrayList<>());
}

array.get(i)您可以获取特定列表以填写您的目的。

答案 2 :(得分:0)

您可以简单地创建一个包含name作为键和arraylist作为值的唯一地图,而不是遍历名称:

HashMap arrayMap = new HashMap();
for(int i = 0; i< 200; i++){
    arrayMap.put("T"+i, new ArrayList());
}

修改 回答你的问题:

int MAX_Y = 100;
int MAX_X = 100;
HashMap<K, V> arrayMap = new HashMap();
for(int i = 0; i< MAX_X; i++){
    for(int x = 0; x < MAX_Y; x++){
        arrayMap.put("T_"+i+"_"+x, new ArrayList());
    }
}

//To retrive array
arrayMap.get("T_15_20");

答案 3 :(得分:0)

你能试试这段代码吗?

 int T=10;
    ArrayList[] arrayLists = new ArrayList[T];
    for(int i=0;i<arrayLists.length;i++){
      arrayLists[i] = new ArrayList();
  }

您稍后可以将任何ArrayList作为arrayLists [i]访问,其中i将是列表编号。

答案 4 :(得分:0)

如果要为每个键存储2D列表,可以使用PFXImportCertStore

final ListMultimap<Integer, List<Integer>> map = ArrayListMultimap.create();
map.put(7, Arrays.asList(1, 2, 3));
map.put(7, Arrays.asList(4, 5, 6));
map.put(1, Arrays.asList(9));

System.out.println(map); // prints '{1=[[9]], 7=[[1, 2, 3], [4, 5, 6]]}'

或者,如果每个键只需要一个列表,则可以执行以下操作:

final List<List<Integer>> list = new ArrayList<>();
list.add(Arrays.asList(1, 2, 3));
list.add(Arrays.asList(4, 5, 6));

System.out.println(list); // prints '[[1, 2, 3], [4, 5, 6]]'