/** 
    * Returns the value to which the specified key is mapped?? 
    * or {@code null} if this map contains no mapping for the key. 
    * 
    * <p>More formally?? if this map contains a mapping from a key 
    * {@code k} to a value {@code v} such that {@code (key==null ? k==null : 
    * key.equals(k))}?? then this method returns {@code v}; otherwise 
    * it returns {@code null}.&nbsp; (There can be at most one such mapping.) 
    * 
    * <p>A return value of {@code null} does not <i>necessarily</i> 
    * indicate that the map contains no mapping for the key; it's also 
    * possible that the map explicitly maps the key to {@code null}. 
    * The {@link #containsKey containsKey} operation may be used to 
    * distinguish these two cases. 
    * 
    * @see #put(Object?? Object) 
    */
    public V get(Object key) { 
    if (key == null) 
    return getForNullKey(); 
    int hash = hash(key.hashCode()); 
    for (Entry<K??V> e = table[indexFor(hash?? table.length)]; 
    e != null; 
    e = e.next) { 
    Object k; 
    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 
    return e.value; 
    } 
    return null; 
    }

??????????????put()????????????if (e.hash == hash && ((k = e.key) == key || key.equals(k)))??

????

?洢Entry???????????????????Entry?????table???顣

??????????????????λ?ó??bucket??????????????????LinkedList?????????????

Key?????hashCode()???????????Entry?????洢λ?á?

Key?????equals()??????????????Map?ж???????

get()??put()??????Value?????hashCode??equals????????

null??hashCode????0????????Entry??????????洢???????????λ??