자바 에서 HashMap 에 key 는 null 을 어디 에 저장 합 니까?

1924 단어 HashMapkeynull
HashMap 집합 은 null 값 을 저장 할 수 있다 는 것 을 알 고 있 습 니 다.
hashMap 은 key 의 hashCode 에 따라 저장 위 치 를 찾 습 니 다.key 가 null 일 때 어떻게 저장 합 니까?
put 방법 에서 사실 첫 줄 에서 key=null 의 상황 을 처리 하 였 습 니 다.

// HashMap put  
 public V put(K key, V value) {
    if (table == EMPTY_TABLE) {
      inflateTable(threshold);
    }
    if (key == null)
       // key null  putForNullKey(value)
       return putForNullKey(value);
    int hash = hash(key);
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
      Object k;
      if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
        V oldValue = e.value;
        e.value = value;
        e.recordAccess(this);
        return oldValue;
      }
    }
 
    modCount++;
    addEntry(hash, key, value, i);
    return null;
  }

 /**
   * Offloaded version of put for null keys
   */
  private V putForNullKey(V value) {
    for (Entry<K,V> e = table[0]; e != null; e = e.next) {
      if (e.key == null) {
        V oldValue = e.value;
        e.value = value;
        e.recordAccess(this);
        return oldValue;
      }
    }
    modCount++;
    addEntry(0, null, value, 0);
    return null;
  }
HashMap 의 put 방법,두 번 째 판단 은 key 가 null 인 판단 을 한 후 putForNullKey(V value)에 들 어 가 는 방법 입 니 다.
앞에서 보 이 는 for 순환 은 talbe[0]링크 에서 key 가 null 인 요 소 를 찾 는 것 입 니 다.찾 으 면 value 를 이 요소 의 value 에 다시 할당 하고 원래 의 value 로 돌아 갑 니 다.
위의 for 순환 을 찾 지 못 하면 이 요 소 를 talbe[0]링크 의 헤더 에 추가 합 니 다.
자바 에 있 는 HashMap 에 있 는 key 가 null 에 어디 에 저장 되 어 있 는 지 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.HashMap key 는 null 내용 입 니 다.저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기