前端面试题,map,forEach,for循环,三个都能遍历,什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端面试题,map,forEach,for循环,三个都能遍历,什么区别?相关的知识,希望对你有一定的参考价值。

for遍历对象自身的和继承的可枚举的属性,也就是说会包括那些原型链上的属性。如果想要仅迭代自身的属性,那么在使用 for...in

forEach

只能遍历数组,不能中断,没有返回值(或认为返回值是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循环,三个都能遍历,什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

Web前端企业面试题

前端面试必会题(4)

2023前端面试题(硬货-持续更新)

高薪程序员&面试题精讲系列18之for和foreach的区别原理,哪个效率更高?

前端面试基本---forEachfiltersome大合集

面试题:测试给定的list,使用for,foreach,iterator删除元素的不同表现