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에 따라 라이센스가 부여됩니다.