2016-07-20 6 views
0
public NavigableMap<K,V> subMap(K fromKey, 
         boolean fromInclusive, 
         K toKey, 
         boolean toInclusive) 

설명 인터페이스 기술 :하는 NavigableMap는 fromKey ~ toKey의 키 범위를지도 의 부분의 뷰를 돌려줍니다. fromKey 및 toKey가 인 경우 fromInclusive 및 toInclusive 이 모두 true가 아닌 경우 반환되는지도는 비어 있습니다. 리턴 된 맵은이 맵에 연동하고 있기 때문에, 리턴 된 맵의 변경은 이 맵에 반영되어 그 역도 성립합니다. 반환 된지도는 이 지원하는 모든 선택적인지도 작업을 지원합니다.TreeMap : NavigableMap <K,V> subMap(), 새지도 객체를 생성합니까?

이 함수는 새 맵 객체를 생성합니까? return 객체에 저장된 내용은 무엇입니까?

+1

새로운 객체를 반환하지 않을 수도 있다고 생각되면 반환 된 객체는 어디에서 왔을 것이라고 생각하십니까? –

답변

4

이 함수는 새 맵 객체를 생성합니까?

그러나이 Map 개체에는 키와 값을 보유하는 노드의 새 사본이 없습니다. 기본지도를 변경하면이지도를 변경할 수 있습니다.

1

예 새로운지도 인스턴스를 만들지 만 새지도의 개체는 이전지도의 개체에 대한 참조를 갖습니다. 개체가 동일하기 때문에 두 맵에 표시되는 개체의 모든 수정 내용을 두 맵에 표시 할 수 있습니다.

새 인스턴스 맵인 경우에도주의하십시오. 고전적인 완전한 기능을 갖춘 Map 인스턴스는 아닙니다. 새 요소를 추가 할 수 없으며 subMap 범위의 요소 만 바꾸거나 제거 할 수 있습니다.

반환되는 맵은, 그 범위 외의 키가 삽입 되려고하면 (자), IllegalArgumentException를 슬로우합니다, 또는 어느 누구의 엔드 포인트의 범위 밖에 놓여 서브맵을 구성

편집. 패키지는 JDK 1.6의 정적 클래스 NavigableSubMap의 예를 들어

: A와

public final V put(K key, V value) { 
      if (!inRange(key)) 
       throw new IllegalArgumentException("key out of range"); 
      return m.put(key, value); 
} 


public final V remove(Object key) { 
     return !inRange(key) ? null : m.remove(key); 
} 

그것은 고려하고 (예를 들어 너무 하위 목록을) 일반적으로 하위 컬렉션으로 서브맵을 사용하는 것이 좋은 습관이다 원래지도의보기 범위 제한.

+0

새 요소를 추가 할 수 있습니다. – daolincheng

+0

@ daolincheng 아직까지는 기존 범위에만 있습니다. 나는 나의 대답을 업데이트했다. 요소 만 바꿀 수 있습니다. – davidxxx