JavaCore之Map的遍历方式

1. Map的遍历方式

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class TestMap {
	public static void main(String[] args) {
		HashMap<Integer, String> map = new HashMap<>();
		map.put(1, "a");
		map.put(2, "b");
		map.put(3, "c");
		map.put(4, "d");
		map.put(5, "e");

		// First Method
		System.out.println("First Method:Map.keySet");
		for (Integer key : map.keySet()) {
			String value = map.get(key);
			System.out.println("key=>" + key + ",value=>" + value);
		}

		// Second Method
		System.out.println("Second Method:Map.entrySet and iterator");
		Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
		while (iterator.hasNext()) {
			Map.Entry<Integer, String> entry = iterator.next();
			System.out.println("key=>" + entry.getKey() + ",value=>" + entry.getValue());
		}

		// Third Method
		System.out.println("Third Method:Map.entrySet");
		for (Map.Entry<Integer, String> entry : map.entrySet()) {
			System.out.println("key=>" + entry.getKey() + ",value=>" + entry.getValue());
		}

		// Fourth Method
		System.out.println("Fourth Method:Map.values()");
		for (String value : map.values()) {
			System.out.println("value=>" + value);
		}
	}
}

2. Map详解

Map详解

3. Iterator用法

3.1 源码

    package java.util;  
    public interface Iterator<E> 
    {  
        boolean hasNext();  
        E next();  
        void remove();  
    }  
  • 容器调用iterator()要求集合类容器返回一个Iterator对象。
    注意:好多集合类都实现了java.lang.Iterable接口,这样容器对象就可以调用iterator()方法。
  • hasNext() 检查容器中是否还有元素。
  • next() 获得容器中的下一个元素。第一次调用时,它返回容器的第一个元素。
  • remove() 将迭代器新返回的元素删除。
  • Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

3.2 Fail-Fast机制

我们知道的是ArrayList是线程不安全的,如果在使用迭代器的过程中有其他的线程修改了List就会抛出ConcurrentModificationException这就是Fail-Fast机制,为了防止多线程下迭代的不安全操作。
那么快速失败究竟是个什么意思呢?
在ArrayList类创建迭代器之后,除非通过迭代器自身removeadd对列表结构进行修改,否则在其他线程中以任何形式对列表进行修改,迭代器马上会抛出异常,快速失败。

3.3 用法例举

List l = new ArrayList();
 l.add("aa");
 l.add("bb");
 l.add("cc");
 for (Iterator iter = l.iterator(); iter.hasNext();) {
     String str = (String)iter.next();
     System.out.println(str);
 }
 /*迭代器用于while循环
 Iterator iter = l.iterator();
 while(iter.hasNext()){
     String str = (String) iter.next();
     System.out.println(str);
 }
 */

3.4 Iterator进阶

  • 枚举Enumeration 和Iterator接口之间的差异是什么?
    枚举是快迭代两倍,使用非常少的内存。枚举适合基本需求。但Iterator是更安全,因为它总是拒绝其他线程修改它正在迭代集合中的对象。
  • Iterator和ListIterator之间有什么不同?
    我们可以使用迭代器Iterator遍历Set和List集合,而ListIterator只可以使用List。
    迭代器遍历只有向前的方向,而ListIterator可以用来在两个方向遍历。
    ListIterator继承Iterator接口,并配备了额外的功能,如添加元素,更换一个元素,能获得上一个和下一个元素的索引位置。
  • fail-fast与fail-safe有什么区别?
    Iterator的fail-fast属性与当前的集合共同起作用,因此它不会受到集合中任何改动的影响。Java.util包中的所有集合类都被设计为fail-fast的,而java.util.concurrent中的集合类都为fail-safe的。当检测到正在遍历的集合的结构被改变时,Fail-fast迭代器抛出ConcurrentModificationException,而fail-safe迭代器从不抛出ConcurrentModificationException。
  • Iterator优点?
    ①迭代器可以提供统一的迭代方式。
    ②迭代器也可以在对客户端透明的情况下,提供各种不同的迭代方式。
    ③迭代器提供一种快速失败机制,防止多线程下迭代的不安全操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值