如何使用for-each循环打印存储不同类对象的ArrayList
如何使用for-each循环打印存储不同类对象的ArrayList?
嗨,我一眼就看出问题出在哪啦!你在for-each循环里的用法搞错了——咱们先看你出错的代码片段:
for (Object i : mylist) { System.out.println(mylist.get(i)); }
这里的循环变量i不是索引值,它是直接从mylist里取出的每一个对象本身!而ArrayList.get()方法需要传入的是int类型的索引,你传一个Object对象进去,编译器肯定会报错,类型不匹配嘛。
正确的写法超简单:
直接打印循环变量就行,因为它已经是你要的对象了:
// 建议把变量名改成obj,更直观,避免和索引混淆 for (Object obj : mylist) { System.out.println(obj); }
因为你提到每个类都重写了toString()方法,所以直接打印对象就会输出你自定义的字符串内容,和你用mylist.get(0)、mylist.get(1)这种方式打印的效果完全一致。
额外小技巧(如果需要区分对象类型):
要是你想在打印的时候区分不同类型的对象,也可以结合instanceof做判断:
for (Object obj : mylist) { if (obj instanceof Loan) { System.out.println("这是一个Loan对象:" + obj); } else if (obj instanceof Date) { System.out.println("这是一个Date对象:" + obj); } else if (obj instanceof Strings) { System.out.println("这是一个Strings对象:" + obj); } // 其他类型依次类推 }
再啰嗦两句核心区别:
- 普通for循环(
for(int i=0; i<mylist.size(); i++))是通过索引去集合里拿元素; - for-each循环是直接遍历集合里的每一个元素,把元素赋值给循环变量,不需要再通过索引获取。
搞清楚这一点,以后就不会再犯类似的错误啦~
内容的提问来源于stack exchange,提问作者Dedicated User
相关产品推荐
相关产品推荐

