HashMap.values().addAll()이상
분석 원인:소스 코드 를 보면 hashMap.values()가 다음 과 같이 실 현 된 것 을 발견 할 수 있 습 니 다.
   //HashMap.java
   public Collection<V> values() {
        Collection<V> vs = values;
        return (vs != null ? vs : (values = new Values()));
    }
    
      private final class Values extends AbstractCollection<V> {
        public Iterator<V> iterator() {
            return newValueIterator();
        }
        public int size() {
            return size;
        }
        public boolean contains(Object o) {
            return containsValue(o);
        }
        public void clear() {
            HashMap.this.clear();
        }
    }
    
    //  values     :AbstractMap.java
      transient volatile Collection<V> values = null;
       public Collection<V> values() {
        if (values == null) {
            values = new AbstractCollection<V>() {
                public Iterator<V> iterator() {
                    return new Iterator<V>() {
                        private Iterator<Entry<K,V>> i = entrySet().iterator();
                        public boolean hasNext() {
                            return i.hasNext();
                        }
                        public V next() {
                            return i.next().getValue();
                        }
                        public void remove() {
                            i.remove();
                        }
                    };
                }
                public int size() {
                    return AbstractMap.this.size();
                }
                public boolean isEmpty() {
                    return AbstractMap.this.isEmpty();
                }
                public void clear() {
                    AbstractMap.this.clear();
                }
                public boolean contains(Object v) {
                    return AbstractMap.this.containsValue(v);
                }
            };
        }
        return values;
    }위 코드 에서 보 듯 이 hashMap.values()는 values 가 비어 있 는 지 먼저 봅 니 다.
AbstractCollection 의 add()와 addAll()방법 을 살 펴 보 겠 습 니 다.
 //AbstractCollection.java
 public boolean add(E e) {
        throw new UnsupportedOperationException();
    }
    
 public boolean addAll(Collection<? extends E> c) {
        boolean modified = false;
        for (E e : c)
            if (add(e))
                modified = true;
        return modified;
    }이 를 통 해 알 수 있 듯 이 add 방법의 실현 은 Unsupported Operation Exception 을 직접 던 지 는 것 입 니 다.addAll 방법 은 add 방법 을 호출 하고 간접 적 으로 이상 을 던 집 니 다.마찬가지 로 HashMap.values()호출 add()와 addAll()도 이상 을 던 집 니 다.
결론:상기 분석 을 통 해 HashMap.values()호출 add()와 addAll()가 이상 한 원인 을 던 진 것 을 명 확 히 했다.또한 실제 사용 에 있어 서 HashMap.values().add()와 HashMap.values().addAll()을 직접 사용 하지 않도록 주의해 야 한다 고 알려 주 었 다.
이 글 은"winger"블 로그 에서 나 왔 습 니 다.전 재 를 사절 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[백준 1411] 비슷한 단어 (JAVA)원본 알파벳이 숌하게 바뀔 경우, 이를 HashMap을 이용해서 쌍으로 묶어준다. HashMap 사용법이 익숙하지 못 해서 어려웠던 문제이다. HashMap 사용법 30분 💬 투포인터 버전 참고...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.