gpt4 book ai didi

java - 集合迭代: For Syntax vs Iterator : Reusing Temporary Variables

转载 作者:行者123 更新时间:2023-12-01 17:16:04 25 4
gpt4 key购买 nike

问题:

就效率而言,必须为每个 for 循环重新创建引用变量似乎是完全错误的。 有什么办法可以做到这样的事情:

       Item i;
for (i : list2)

此外,创建临时引用变量有那么大的区别吗?

请参阅下面的原始代码旧迭代器样式:

<小时/>

原始代码

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);
<小时/>

旧迭代器语法

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());

更新

使用 JAD 反编译该类。由于 JAD 很旧,它添加了一些类型转换,但差异是显而易见的。

反编译的 For 循环

        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();

反编译迭代器

for(Iterator it = list1.iterator(); it.hasNext(); finalList.add((Application)it.next()));
for(Iterator it = list2.iterator(); it.hasNext(); finalList.add((Application)it.next()));

最佳答案

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)

不可以,快速迭代中的变量必须是const,因此不能预先声明。

Also, does it make that much of a difference to create temporary reference variables?

正如我所说,变量实际上并不存在,所以不,无论您声明一个新变量还是重复使用旧变量,都没有任何区别。

我建议你参加编译器类(class),它们对此类事情非常有启发。

关于java - 集合迭代: For Syntax vs Iterator : Reusing Temporary Variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com