前端面试题,map,forEach,for循环,三个都能遍历,什么区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端面试题,map,forEach,for循环,三个都能遍历,什么区别?相关的知识,希望对你有一定的参考价值。
for遍历对象自身的和继承的可枚举的属性,也就是说会包括那些原型链上的属性。如果想要仅迭代自身的属性,那么在使用 for...inforEach
只能遍历数组,不能中断,没有返回值(或认为返回值是undefined)
map
只能遍历数组,不能中断,返回值是修改后的数组 参考技术A 虽说都能遍历,但是呢,效率完全不同了吧。所以,这道题主要问的是算法方向的问题! 参考技术B 这个区别就是她们的遍历过程不一样
面试题:测试给定的list,使用for,foreach,iterator删除元素的不同表现
上代码:
1. 使用增强for循环(foreach)
1 package com.xxx; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** 7 * 测试给定的list,使用for,foreach,iterator删除的不同表现 8 */ 9 public class TestForOfList { 10 public static void main(String[] args) { 11 List<Integer> list = new ArrayList<>(); 12 for (int i = 0; i < 10; i++) { 13 list.add(i); 14 } 15 16 //单独使用会报错,java.util.ConcurrentModificationException 17 for (Integer val : list) { 18 list.remove(val); 19 } 20 } 21 }
报以下错误:
Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) at java.util.ArrayList$Itr.next(ArrayList.java:859) at com.company.TestForOfList.main(TestForOfList.java:25)
2. 使用for循环
1 package com.xxx; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 /** 7 * 测试给定的list,使用for,foreach,iterator删除的不同表现 8 */ 9 public class TestForOfList { 10 public static void main(String[] args) { 11 List<Integer> list = new ArrayList<>(); 12 for (int i = 0; i < 10; i++) { 13 list.add(i); 14 } 15 16 for (int i = 0; i < list.size(); i++) { 17 System.out.println(list.remove(i)); 18 } 19 20 } 21 }
结果是:
0 2 4 6 8
可见时可以删除的,只是删除的都是索引时偶数的。因为索引时动态调整的。
3. 使用iterator
1 package com.xxx; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 /** 8 * 测试给定的list,使用for,foreach,iterator删除的不同表现 9 */ 10 public class TestForOfList { 11 public static void main(String[] args) { 12 List<Integer> list = new ArrayList<>(); 13 for (int i = 0; i < 10; i++) { 14 list.add(i); 15 } 16 17 Iterator<Integer> iter = list.iterator(); 18 while (iter.hasNext()) { 19 iter.next(); 20 iter.remove(); 21 } 22 System.out.println(list.size()); 23 24 } 25 }
结果是:
0
表面全部都删除了。
总结以下,使用iterator能把list的元素区别删除了;for只能删除索引时偶数的元素;foreach删除报错。
以上是关于前端面试题,map,forEach,for循环,三个都能遍历,什么区别?的主要内容,如果未能解决你的问题,请参考以下文章