zoukankan      html  css  js  c++  java
  • Map初见

     * @see HashMap
     * @see TreeMap
     * @see Hashtable
     * @see SortedMap
     * @see Collection
     * @see Set
     * @since 1.2
     */
    public interface Map<K,V> {
    }

    Map 是一个接口, Map 里面有个Entry<K,V>类.一个Map里面不会有重复的key,一个key对应一个value。

    Map接口里面定义了很多基本的方法, 如clear(),size(),value(),repalce(),get()等等。

    Map主要围绕的 key,value , 以及Entry<K,V> .

    Map中还在自身接口中, 又定义了一个Entry的接口,这个是所有的Map类型都会实现的一个接口。

    说实话,个人感觉, Map有点像是个list,( List<Entry<E,V>>), list里面装的是0个或者0个以上的Entry<K,V>。但是里面的方法肯定各有各的特点。

    那么里面的方法是如何实现的呢, 现在取AbstractMap 这个实现了Map接口的抽象来看看里面的方法。

    看看最常用的get(k)方法, 使用Iterator,遍历map里的所有entry,找到对应value,简单易懂.

    注意,在AbstractMap中,有个类SimpleEntry<K,V> 实现了 Map.Entry<K,V>. 并实现了里面的方法.

    所有实现Map接口的类,都会有对应自己的Entry 实现Map.Entry<K,V>.

    public V get(Object key) {
            Iterator<Entry<K,V>> i = entrySet().iterator();
            if (key==null) {
                while (i.hasNext()) {
                    Entry<K,V> e = i.next();
                    if (e.getKey()==null)
                        return e.getValue();
                }
            } else {
                while (i.hasNext()) {
                    Entry<K,V> e = i.next();
                    if (key.equals(e.getKey()))
                        return e.getValue();
                }
            }
            return null;
        }
  • 相关阅读:
    2018/12/08 L1-043 阅览室 Java
    2018/12/08 L1-042 日期格式化 Java
    breeze源码阅读心得
    Spark ML源码分析之四 树
    Spark ML源码分析之三 分类器
    Spark ML源码分析之二 从单机到分布式
    Spark ML源码分析之一 设计框架解读
    Adaboost的意义
    RBM如何训练?
    ChromeTimeline
  • 原文地址:https://www.cnblogs.com/YYfish/p/6628223.html
Copyright © 2011-2022 走看看