Map中entry的源代码

来源:互联网 发布:淘宝做代理赚钱吗 编辑:程序博客网 时间:2024/06/13 22:29

Map中entry的源代码

   很多人在编程的时候不会用到entry和entrySet,可是在面试的时候还是会遇到这个题目,这里就这个代码的源码做一探究:

引入案例Map的三种常用遍历:

import java.util.*;

/*

 * map集合的遍历,分别使用forIteratorentry三种方式迭代,并比较相互的优劣,说出遍历原理

 */

 

public class Test2 {

    public static void main(String[] args) {

       Map<String,String> ma=new TreeMap<String,String>();

       ma.put("河南","郑州");

       ma.put("山东","济南");

       ma.put("河北","石家庄");

       ma.put("陕西","西安");

       //Map接口方法 Set keySet()将Map集合中的所有键存储到Set集合

       //步骤:Map集合方法KeySet(),将所有键存储到Set集合

       Set<String> set=ma.keySet();

       //迭代Set集合(Iterat

       Iterator it=set.iterator();

       while(it.hasNext()){

           //取出Set集合中的元素(就是Map中的键)

           String key=(String) it.next();

           //Map集合方法get,通过键获取值

           String value=ma.get(key);

           System.out.println(key+"--------"+value);

       }

       //增强for遍历集合

       for(String key:set){

           //得到key然后再通过key调用方法得到value

           String value=ma.get(key);

           System.out.println(key+"---"+value);

       }

       //entrySet方式 Map接口方法entrySet()Map集合中的键值对的映射关系对象存储到Set集合

       //映射关系:Map接口中的内部接口Entry MapEntry(描述键值对映射关系)返回Set<Map<键,值>>

       //Map集合方法entrySet()将键值对映射关系对象MapEntry,存到Set集合     

       Set<Map.Entry<String, String>> set1=ma.entrySet();

       //迭代Set集合(Iterator

       Iterator<Map.Entry<String, String>>ite=set1.iterator();

       //获取出Set集合中的元素

       while(ite.hasNext()){

           //迭代出来的是什么,是键值对应关系对象MapEntry

           //使用键值对映射关系对象Map.Entry接口方法,getKey getValue获取键值对

           Map.Entry<String, String> entry=ite.next();

           System.out.println(entry.getKey()+"-------"+entry.getValue());

       }

    }

}

 

keySet和使用增强for方法遍历集合还是比较容易的, entry看似也不难,那么entry究竟有什么需要深究呢?

先在这里提出几个问题?

entry是个方法,返回值是个Set类型的接口,案例中的

Set<Map.Entry<String,String>> set1=ma.entrySet()从概念上理解是不是

接口<接口<数据类型>>=对象.调用方法   

那么问题来了,接口实现不是需要实现类吗?为什么这里确实一个方法呢?或者返回了一个接口呢?

 

   带着这一系列疑问,我们来看下源码,首先看entrySet的源码 

   Set<Map.Entry<K, V>> entrySet();   存在于Map接口中

那么谁实现了这个抽象方法呢?java.util 类HashMap<K,V>实现了Map接口,并重写了entrySet方法,源码如下:

publicSet<Map.Entry<K,V>>entrySet() {

        return entrySet0();

    }

    private Set<Map.Entry<K,V>> entrySet0() {

        Set<Map.Entry<K,V>> es = entrySet;

        return es !=null ? es : (entrySet =new EntrySet());

}

返回一个entry、另外Map.Entry这个的理解是Entry是Map的一个内部类

 

0 0
原创粉丝点击