Java Foreach参数性能
我想知道使用方法调用作为获取集合的foreach参数的性能。让我们看一个例子:Java Foreach参数性能,java,performance,foreach,Java,Performance,Foreach,我想知道使用方法调用作为获取集合的foreach参数的性能。让我们看一个例子: for (Entry<K, V> entry : map.entrySet()) { doing.stuff(); } for(条目:map.entrySet()){ doing.stuff(); } 我假设JVM在开始循环之前只调用map.entrySet()一次,取第一个元素,取他的迭代器并对其进行迭代,再也不会调用map.entrySet(),或者如果数组只是用本地创建的int迭代器(或
for (Entry<K, V> entry : map.entrySet()) {
doing.stuff();
}
for(条目:map.entrySet()){
doing.stuff();
}
我假设JVM在开始循环之前只调用map.entrySet()一次,取第一个元素,取他的迭代器并对其进行迭代,再也不会调用map.entrySet(),或者如果数组只是用本地创建的int迭代器(或类似的东西)对其进行迭代,但我不知道JVM是如何工作的,所以我想确定——它是这样工作的吗,或者最好在循环之前保存集合并将其作为本地变量传递,而不是在循环中调用getter?来自:
增强型for语句的形式如下:
增强型for语句相当于以下形式的基本for语句:
基于此,map.entrySet()
集合将从以下位置检索一次:
for(Object e : collection) {
}
增强型for语句的形式如下:
增强型for语句相当于以下形式的基本for语句:
基于此,map.entrySet()
集合将被检索一次
for(Object e : collection) {
}
相当于
Iterator i = collection.iterator();
while(i.hasNext()) {
Object e = i.next();
}
因此它涉及到迭代器对象的创建。除了迭代器之外,next()还涉及对并发修改的额外检查。因此,在ArraList
的情况下,通过索引访问元素可能更有效
for(int i = 0; i < list.size(); i++) {
Object e = list.get(i);
}
for(int i=0;i
相当于
Iterator i = collection.iterator();
while(i.hasNext()) {
Object e = i.next();
}
因此它涉及到迭代器对象的创建。除了迭代器之外,next()还涉及对并发修改的额外检查。因此,在ArraList
的情况下,通过索引访问元素可能更有效
for(int i = 0; i < list.size(); i++) {
Object e = list.get(i);
}
for(int i=0;i
请参阅此方法的唯一问题是,如果list
是LinkedList
或list
的另一个实现,它不使用数组,则get(int index)
方法可以遍历整个列表以获取最后一个元素。这种方法唯一的问题是,如果list
是LinkedList
或另一个不使用数组的list
实现,则get(int index)
方法可以遍历整个列表以获取最后一个元素。