Question:
In terms of efficiency it seems completely wrong to have to recreate an reference variable for every for
loop.
Is there any way to do something like:
Item i;
for (i : list2)
Also, does it make that much of a difference to create temporary reference variables?
See Original Code vs Old Iterator Style below:
Original Code
for (Item i : DataStore.SomeList) {
if (someBoolean)continue;
if (someBoolean2)
finalList.add(i);
else if (someBoolean3)
list1.add(i);
else
list2.add(i);
}
for (Item i : list1)
finalList.add(i);
for (Item i : list2)
finalList.add(i);
Old Iterator Syntax
Item i;
Iterator<Item> it = DataStore.SomeList.iterator();
while(it.hasNext())
{
if (someBoolean)continue;
if (someBoolean2)
finalList.add(i);
else if (someBoolean3)
list1.add(i);
else
list2.add(i);
}
it = list1.iterator();
while(it.hasNext())finalList.add(it.next());
it = list2.iterator();
while(it.hasNext())finalList.add(it.next());
Update
Decompiled the class using JAD. Since JAD is old it added a few casts but the differences are visible.
Decompiled For Loop
Item i;
for(Iterator iterator1 = list1.iterator(); iterator1.hasNext(); finalList.add(i))
i= (Item)iterator1.next();
Item i;
for(Iterator iterator2 = list2.iterator(); iterator2.hasNext(); finalList.add(i))
i= (Item)iterator2.next();
Decompiled Iterators
for(Iterator it = list1.iterator(); it.hasNext(); finalList.add((Application)it.next()));
for(Iterator it = list2.iterator(); it.hasNext(); finalList.add((Application)it.next()));