我有一个HashMap
来存储来自DB的数据。用户是否必须创建迭代引用?
Map<String, List<Employee>> **map** = Cache.getMap(key);
for( Map.Entry<String, List<Employee>> me: map.entrySet()){
或者:
for(Map<String, List<Employee>> me : Cache.getMap(key)){
在任何给定的时间点,最少20个线程将命中Cache。每个调用者将花费大约500毫秒来完成处理地图中的数据。
那说,从GC和速度的角度来看,这是上述两个中更好的选择。
或者是否有比上述选项更好的选择?
答案 0 :(得分:0)
是否写作
IterableOrArray all=expression;
for(ElementType element: all) {
…
}
或
for(ElementType element: expression) {
…
}
没有任何区别,因为在这两种情况下,expression
将仅在循环开始时而不是在每次迭代中计算一次。在Iterable
的情况下,甚至很难想象,结果代码如何重新评估表达式并告诉新Iterator
在旧表达式的前一个位置继续。
如果仍有疑问,可以使用以下示例程序进行验证:
public static void main(String[] args) {
for(String s: getTheCollection()) {
System.out.println(s);
}
}
static Iterable<String> getTheCollection() {
System.out.println("getTheCollection() called");
return () -> {
System.out.println("iterator() called");
return Stream.of("foo", "bar", "baz").iterator();
};
}
或
public static void main(String[] args) {
String[] array={ "foo", "bar", "baz" };
for(String s: array) {
System.out.println(s);
// has no consequences:
array=null;
}
}
因此,由于没有任何区别,因此GC和速度观点也没有差异。