我有4种访问arraylist的方法。
1)使用Java5 foreach循环进行循环。 2)使用for循环和size()方法循环ArrayList。 3)使用Iterator迭代ArrayList。 4)使用Java中的ListIterator遍历ArrayList。
我的问题是......都一样吗?一切都好吗?有何不同? (特别是Iterator我问过它)
答案 0 :(得分:2)
1)如果您不需要跟踪项目的索引/位置,则不会在迭代中间删除项目。此策略消除了显式提取要处理的下一个项目的负担。
2)当您需要跟踪您正在处理的项目的索引/位置时,这是首选。您仍然可以修改列表,但必须自己获取要处理的项目。
3)如果您希望在迭代时从列表中删除项目,则更为可取。与2)
相比,您不需要管理自己的索引/位置4)如果您需要向前和向后遍历列表,请在迭代时替换项目等
他们每个人都有自己的用例。
答案 1 :(得分:1)
在我看来取决于你的java版本!
如果您使用的是Java 8,我建议使用流。否则,它还取决于您需要对数据执行的操作:
for (Object o : yourArrayList) {...}
这比使用诸如for (int i = 0; i < yourList.size(); i++) {...}
之类的东西进行迭代更有效,因为你不必遍历整个列表来获取每个对象(不确定列表是否进行任何内部缓存) 。如果您需要删除对象,请使用Iterator
或Java 8的流:
Iterator<Object> itr = yourArrayList.iterator();
while(itr.hasNext()) {
Object o = itr.next();
//conditional around o, assume it's true for this example and remove 'o'
itr.remove();
}
我建议使用vanilla for循环的唯一时间是跟踪项目的位置。
答案 2 :(得分:0)
取决于使用
<强>实施例强>
List<String> x=new ArrayList();
遍历使用for-each和迭代器是非常相似的,因为for-each循环实现了一个隐式迭代器。
for(String a:x){
}
但是如果你想根据它的位置访问元素,那么使用normal for loop
for(int i=0;i<x.size();i++){
x.get(i);//access each elements according to pos.
}