在循环中命名Arraylists - Java

时间:2012-11-19 20:45:36

标签: java loops arraylist

我需要在while循环中创建一个Arraylist,其名称也基于循环中的变量。这就是我所拥有的:

while(myScanner.hasNextInt()){    

    int truster = myScanner.nextInt();
    int trustee = myScanner.nextInt();
    int i = 1;
    String j = Integer.toString(i);
    String listname = truster + j;

    if(listname.isEmpty()) {
        ArrayList listname = new ArrayList();
    } else {}
    listname.add(truster);

    i++;
}

变量truster在扫描时会出现多次,因此if语句试图检查arraylist是否已经存在。不过,我想我可能已经做到了这一点。

感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

将ArrayLists存储在Map中:

Map<String, List<String> listMap = new HashMap<String,List<String>>();
while (myScanner.hasNextInt()){    
    // Stuff
    List<String> list = new ArrayList<String>();
    list.add(truster);
    listMap.put(listname, list);
}

请注意使用泛型(<>中的位)来定义ListMap可以包含的对象类型。

您可以使用Map

访问listMap.get(listname);中存储的值

答案 1 :(得分:1)

如果我理解正确,请创建列表列表,或者更好的是,创建一个映射,其中键是您想要的动态名称,值是新创建的列表。用另一种方法包装它并将其称为createNewList("name")

答案 2 :(得分:1)

真的不确定你的意思,但你的代码有一些严重的根本缺陷,所以我会解决这些问题。

//We can define variables outside a while loop 
//and use those inside the loop so lets do that
Map trusterMap = new HashMap<String,ArrayList<String>>();

//i is not a "good" variable name, 
//since it doesn't explain it's purpose
Int count = 0;

while(myScanner.hasNextInt()) {    
    //Get the truster and trustee
    Int truster = myScanner.nextInt();
    Int trustee = myScanner.nextInt();

    //Originally you had:
    // String listname = truster + i;
    //I assume you meant something else here 
    //since the listname variable is already used

    //Add the truster concated with the count to the array
    //Note: when using + if the left element is a string 
    //then the right element will get autoboxed to a string

    //Having read your comments using a HashMap is the best way to do this.
    ArrayList<String> listname = new ArrayList<String>();
    listname.add(truster);
    trusterMap.put(truster + count, listname);
    i++;
}

此外,您将在myScanner中存储一个Ints流,这些Int流将被输入到数组中,但每个都具有非常不同的含义(trustertrustee)。您是否尝试从文件或用户输入中读取这些内容?有更好的方法来处理这个问题,如果你在下面用你的意思发表评论,我会用建议的解决方案进行更新。