Java:迭代不一致的列表对象

时间:2018-02-21 16:44:25

标签: java

我正在尝试从对象的不一定大小的数组中显示数组列表索引。如何迭代大小不一致的arraylist以防止IndexOutOfBoundsException。

public static void main(String[] args) {

Hello b = new Hello();
System.out.println("test 1 =" +b.Apple().get(0));
System.out.println("test 2 =" +b.Apple().get(1));
System.out.println("test 3 =" +b.Apple().get(2));

}

返回不一致索引列表的结果的Hello.java文件

public ArrayList<Integer> Apple(){
ArrayList<Integer> values = new ArrayList<Integer>();

rs = db.getSM().executeQuery("SELECT a, b, count(*) AS rowCount from table");   
while(rs.next()) {
    values.add(rs.getInt("count"));
}

return values;

预期结果

首先,它只有2个元素。所以它会打印

test 1 = 23
test 2 = 13
test 3 = 0

第二次运行,它将有3个元素。所以它会打印

test 1 = 23
test 2 = 10
test 3 = 3    

1 个答案:

答案 0 :(得分:1)

示例解决方案,如果只有两个元素时可以省略test 3 = 0提及:

for(int index=0; index<yourList.size(); index++) {
    Object element=yourList.get(index);
    // do something with the element (and its index if needed)
}
for(Object element : yourList) {
    //do something with the element
}
Iterator<Object> it = yourList.iterator();
while (it.hasNext()) {
    Object element = it.next();
    //do something with your element
}
yourList.forEach(element -> /* do something with your element */);

除了第一个提供索引的解决方案外,所有这些解决方案在功能上都是等效的。

不要像我对元素类型那样使用Object,显然应该使用元素的类型。

要产生当前输出,第一个解决方案似乎最合适,因为它提供了一个索引:

ArrayList<Integer> yourList = b.Apple();
for (int index=0; index < yourList.size(); index++) {
    System.out.printf("test %d = %d", index + 1, yourList.get(index));
}

printf获取此模板的字符串模板和参数列表;此处%d表示数字,第一次出现被基于1的索引替换,第二次出现被列表元素的值取代)

如果您不想省略test 3 = 0输出,我认为Federico klez Culloca建议创建生成器是最好的,但由于我不熟悉它们,我会提供一种解决方案,它将零添加到列表中,直到达到目标大小:

ArrayList<Integer> yourList = b.Apple();
int desiredSize=3;
int missingZeroes = desiredSize - yourList.size();
for(int addedZeroes=0; addedZeroes < missingZeroes; addedZeroes++) {
    yourList.add(0);
}
//then proceed with the above List traversal solutions.