我可以将ArrayList中的Java值分配给不同的变量而无需对大小进行硬编码吗?

时间:2011-09-15 20:05:52

标签: java arrays list collections arraylist

我有一个ArrayList,我们会说它最多可以是5号。我想将第一个元素分配给var1,第二个元素分配给var2,第三个元素分配给var3等。

但是,有时ArrayList的项目少于5个,在这种情况下,我不会为某些变量赋值。

所以我的问题是,有没有比这更好的方法:

if (myArrayList.size() > 0)
    var1 = myArrayList.get(0);
if (myArrayList.size() > 1)
    var2 = myArrayList.get(1);
if (myArrayList.size() > 2)
    var3 = myArrayList.get(2);
if (myArrayList.size() > 3)
    var4 = myArrayList.get(3);
if (myArrayList.size() > 4)
    var5 = myArrayList.get(4);

5 个答案:

答案 0 :(得分:12)

这个来源肯定是一个糟糕的代码设计。如果arraylist不包含该字段(稍后你使用它),你还要初始化变量是什么?一个更大的例子或者你正在尝试做什么在这里会有所帮助。通常只使用

但我至少可以想到两种方法:

    switch(myArrayList.size()) {
    case 5:
        var4 = myArrayList.get(4);
    case 4:
        var3 = myArrayList.get(3);
    case 3:
        var2 = myArrayList.get(2);
            // and so on
    }

或只是使用try / catch。

    try {
        var0 = myArrayList.get(0);
        var1 = myArrayList.get(1);
    }
    catch(IndexOutOfBoundsException ex){
    }

但是大多数情况下,最好使用arraylist本身,并使用您用于变量的默认值来填充它。

答案 1 :(得分:3)

最简单的方法是:

Object[] vars = myArrayList.toArray(new Object[5]);

如果您坚持使用变量var1到var5而不是仅使用数组元素,请将数组元素复制到变量中。或者,您可以将“= varN”代码中的所有实例替换为“= myArrayList.get(n)”。

答案 2 :(得分:1)

我同意Voo的看法,这很可能来自糟糕的代码设计。但这是我展示我对最终变量和三元表达式的热爱的机会。 :-) 这个怎么样? (对于yuks,我假设是一个字符串的ArrayList。)

final Iterator<String> iter = myArrayList.iterator();
final String var1 = iter.hasNext() ? iter.next() : null;
final String var2 = iter.hasNext() ? iter.next() : null;
final String var3 = iter.hasNext() ? iter.next() : null;
final String var4 = iter.hasNext() ? iter.next() : null;
final String var5 = iter.hasNext() ? iter.next() : null;

答案 3 :(得分:1)

如何使用单独的数组并为循环列表中的相应值分配每个数组的值?

for (i = 0; i<= 5; i++) {
var [i] = myArrayList.indexOf(i);
}

答案 4 :(得分:0)

所描述的设计看起来很难看。您可以使用三元运算符来实现所需目的:

var1 = myArrayList.size() > 0 ? myArrayList.get(0) : "null";