Map.entry到底是什么鬼?--------(不理解的就进来看看呀呀)_qiukui111的博客-程序员宝宝

技术标签: Java  java  编程语言  hashmap  

如果连Map是什么你都理解不了,那我相信你也不会看到这里了。

一、Map.entry是什么?

  1. Map是java中的接口,Map.Entry是Map的一个内部接口。(不信的小伙伴可以自己去看一下源码哟!!!)
  2. 此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)
  3. 接口中有getKey(),getValue方法(很重要的两个方法

说再多你也可能不信,那就:-----> 直接上源码哈

    interface Entry<K, V> {
    
        /**
         * Returns the key corresponding to this entry.
         *
         * @return the key corresponding to this entry
         * @throws IllegalStateException implementations may, but are not
         *         required to, throw this exception if the entry has been
         *         removed from the backing map.
         */
        K getKey();

        /**
         * Returns the value corresponding to this entry.  If the mapping
         * has been removed from the backing map (by the iterator's
         * {@code remove} operation), the results of this call are undefined.
         *
         * @return the value corresponding to this entry
         * @throws IllegalStateException implementations may, but are not
         *         required to, throw this exception if the entry has been
         *         removed from the backing map.
         */
        V getValue();
        //...........其它一些方法,有需要的小伙伴自行去查看源码
  1. Map.entry的实现类是Map子类里面的一个静态的内部类(强烈建议大家去看一下源码)

以HashMap为例,我带大家再看看第四点(HashMap源码内有个内部实现了Map.entry接口)

请看图

static class Entry<K,V> implements Map.Entry<K,V> {
      
    final K key;  
    V value;  
    Entry<K,V> next;  
    final int hash;  
  
    /** 
     * Creates new entry. 
     */  
    Entry(int h, K k, V v, Entry<K,V> n) {
      
        value = v;  
        next = n;  
        key = k;  
        hash = h;  
    }  
  
    public final K getKey() {
      
        return key;  
    }  
  
    public final V getValue() {
      
        return value;  
    }  
  
    public final V setValue(V newValue) {
      
 V oldValue = value;  
        value = newValue;  
        return oldValue;  
    }  
    //..........剩下的不再复制过来,有需要自行去查看
}  

二、Map如何遍历?

要盖房子必须要有砖,同理要知道如何遍历Map,那就要有以下一些知识储备

  • V put(K key, V value):向Map中添加key-value
  • V get(K key): 获取指定key的value,不存在返回null
  • V remove(K key): 删除指定key的键值对,返回value
  • Set< K > keySet(): 从Map中得到key的集合
  • Set<Map.Entry<K, V>> entrySet(): 从Map集合中得到内部接口Entry的集合

遍历方法:
直接上代码哈

//4.map遍历学习
	public static void test4()
	{
    
		Map<String, String> map = new HashMap<String, String>();
		//存入数据
		map.put("我的公众号", "放牛娃学编程");
		map.put("口号", "分享与热爱");
		map.put("爱好", "一起交流学习呀呀");
		
		//1.普遍使用 (效率低下,大量数据时不推荐使用)
		for(String key: map.keySet())
		{
    
			System.out.println(key+"------> "+map.get(key));
		}
		
		//2.Map.entrySet来遍历  (推荐使用这种方法)
		for(Map.Entry<String, String> entry: map.entrySet())
		{
    
			System.out.println(entry.getKey()+"---------> "+entry.getValue());
		}
		
		//3.使用迭代器来遍历
		System.out.println("----------通过iterator遍历key和value-----");
		Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
		while(it.hasNext())
		{
    
			Map.Entry<String, String> entry = it.next();
			System.out.println(entry.getKey()+"---------> "+entry.getValue());
		}
		
		//4.通过map.value (直接遍历value)
		for(String value: map.values())
		{
    
			System.out.println("value="+value);
		}
	}

三、分享结束

最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!

  1. Java web从入门到精通电子书

  2. Python机器学习电子书

  3. Python400集(北京尚学堂)

  4. JavaScript项目案例、经典面试题

  5. Java300集(入门、精通)

  6. Java后端培训机构录集(同事培训内部提供)

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qiukui111/article/details/104334174

智能推荐

python 类的继承(自己的一点理解)_锋行天下-宇希的博客-程序员宝宝

类的继承.py中代码如下:# 类的继承# 1.继承时构造函数__init__()# 1.1继承中无__init__(),调用基类的__init__()# 1.2继承中有__init__(),调用派生类的__init__(),不调用基类的__init__()# 1.3继承中有__init__(),但需要调用基类的__init__(),必须显示调用基类的__init__()# 1.3.1 经典类的写法: 父类名称.__init__(self,参数1,参数2,...)

SpringMVC 和 Struts2 的区别?_杰克L的博客-程序员宝宝

1、Struts2 是类级别的拦截, 一个类对应一个 request 上下文,SpringMVC 是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为 Struts2 中 Action 的一个方法可以对应一个 url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。2、由上边原因,SpringMVC 的方法之间基本上独立的,独享 requ

linux中date命令y与Y区别,Linux命令之date_看来我摸的博客-程序员宝宝

我使用过的Linux命令之date--显示、修改系统日期时间用途说明ate命令可以用来显示和修改系统日期时间,注意不是time命令。常用参数格式:date显示当前日期时间。格式:date mmddHHMM格式:date mmddHHMMYYYY格式:date mmddHHMM.SS格式:date mmddHHMMYYYY.SS设置当前日期时间,只有root用户才能执行,执行完之后还要执行clock...

【编程笔记】Unity3D语言的类型系统--C#的类型系统_diaominruo1241的博客-程序员宝宝

  几乎所有的编程语言都有自己的类型系统。  而编程语言更是常常按照其类型系统而被分为强类型语言/弱类型语言、安全类型语言/不安全类型语言、静态类型语言/动态类型语言等。  而C#的类型系统是静态、安全,并且在大多数时候是显示的;  C#要求其所有类型全部从System.Object类派生。无论是开发者自己定义的类型、还是C#所提供的类型。  下面两种定义类型的方式...

NotFoundClass_hucile的博客-程序员宝宝

出现此异常,一般是没有导入jar包!!!

VC设计分割视图通用创建框架_dongliqiang2006的博客-程序员宝宝

VC设计分割视图通用创建框架2004-07-29 18:51 作者: 冯杰 出处: 天极网 责任编辑:方舟   目前基于分割视图的应用开发十分流行,分割视图技术是在同一个框架窗口下同时显示多个视图的一项技术。运用分割视图,可以在较短时间内给用户更多的信息量,从而使得用户界面更加的友好,增强了软件的可操作性。本文提出一个分割视图的通用创建框架。  1.分割视图创建框架  分割视图的创建大体上

随便推点

python 批量修改图片尺寸_爱吃黄瓜的喵的博客-程序员宝宝

python 批量修改图片尺寸# -*- coding:utf8 -*-from PIL import Imageimport os.pathimport glob# 用来解析图片尺寸用的# from skimage import transform,data,iodef convertjpg(jpgfile,outir,width = 1024 ,height = 1365):#将图片修改为416X416 img = Image.open(jpgfile) try:

解决Symbolic link not allowed or link target not accessible问题一例_Allen2004的博客-程序员宝宝

  最近搭建新apache服务器,一个web目录位置使用了symbolic link. 从/web/home -&amp;gt; /home/apache/web/   web部分使用了perl.java  结果发现启动后,服务器报Symbolic link not allowed or link target not accessible。  甚感奇怪。  检查配置文件,http...

软件需求最佳实践——SERU过程框架原理与应用(典藏版)_weixin_30877181的博客-程序员宝宝

《软件需求最佳实践——SERU过程框架原理与应用(典藏版)》基本信息作者: 徐锋出版社:电子工业出版社ISBN:9787121200526上架时间:2013-5-5出版日期:2013 年5月开本:16开页码:424版次:1-1所属分类:计算机更多关于 》》》《软件需求最佳实践——SERU过程框架原理与应用(典藏版)》内容简介计算机书籍  ...

Spring Cloud 六《Spring Cloud+gRPC+Nacos》_哈定的博客-程序员宝宝

0、前言集成GRPC1、代码目录2、api服务2.1 helloworld.protosyntax = "proto3";option java_multiple_files = true;option java_package = "com.yun.grpc.api";option java_outer_classname = "HelloWorldProto";// The greeting service definition.service Simple { //

前端 for循环练习题_某某某的洛先生的博客-程序员宝宝

打印1-100之间所有奇数之和&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&amp;lt;head&amp;gt; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt; &amp;lt;title&amp;gt;奇数和&amp;lt;/title&amp;gt; &amp;lt;script&amp;gt; var sum = 0; for(var i =

【ACM】ACM练习——玛雅历_little_stupid_child的博客-程序员宝宝

1.问题描述玛雅历Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 80876 Accepted: 24862Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法。这个Haab历法拥有19个月,在开...