AbstractMap 추상 클래스는 몇 가지 간단하고 일반적인 메서드를 구현하는데, 그 자체는 어렵지 않다. 그러나 이 추상 클래스에는 주목할 만한 두 가지 방법이 있습니다. KeySet 및 values 메서드의 소스 코드 구현은 교과서적인 모델이라고 할 수 있습니다.
추상 클래스는 일반적으로 골격으로 구현되며 공용 메서드는 하위 클래스로 구현됩니다. 이전 문장 에서 우리는 Map 인터페이스에 대해 설명했고, 이 문서에서는 AbstractMap 클래스를 분석하고 연구했다.
Java 에서지도 유형의 데이터 구조가 상당히 많습니다. 뼈대로서 AbstractMap 은 Map 인터페이스의 몇 가지 메서드를 구현합니다. 즉, 다양한 Map 의 하위 클래스에 공통된 메서드를 제공하며 구현되지 않은 메서드는 다를 수 있습니다.
추상 클래스는 new 키워드를 통해 추상 클래스의 인스턴스를 직접 만들 수는 없지만 생성자를 가질 수 있습니다. AbstractMap 은 보호된 손질된 매개 변수없는 생성자를 제공합니다. 즉, 하위 클래스만 액세스할 수 있습니다 (물론 추상 클래스이며 다른 클래스는 직접 인스턴스화할 수 없음). 즉, 하위 클래스만 이 매개 변수없는 생성자를 호출할 수 있습니다.
맵 인터페이스에서 포털 인터페이스는 내부적으로 정의됩니다. 이 인터페이스는 Map.Entry. AbstractMap 구현에 저장된 키 값 쌍의 내부 구현을 유지 관리하는 Map mapping 입니다. 이 내부 인터페이스에는 두 개의 * * * 가 있습니다. 하나는 가변 SimpleEntry 이고 다른 하나는 불변 simpleimmutabbase 입니다
Publicstaticclassimpleentryimplemententry, java.io.Serializable
지도. 포털 인터페이스를 구현하고 Serializable 을 구현했습니다.
그것의 방법은 비교적 간단하며, 모두 값을 취하고 값을 저장하는 작업이다. 키 값의 정의는 최종 손질입니다. 즉, 불변의 참조입니다. 또한 setValue 메서드는 약간 특별합니다. 저장된 값은 저장된 값이 아니라 이전 값을 반환합니다. 배워야 할 것은 그것이 다시 쓰는 equals 와 hashCode 방법이다.
Publicstaticclassimpleimmutableentryimplementsentry, java.io.serializablesimpleimmutableentry
불변으로 정의된 항목은 실제로 변경되지 않습니다. setValue 메소드를 제공하지 않기 때문에 여러 스레드가 동시에 액세스할 경우 setValue 메소드에 의해 수정할 수 없습니다. 해당 키 및 값 멤버 변수는 SimpleEntry 와 비교하여 최종 유형으로 정의됩니다. SetValue 메서드를 호출하면 UnsupportedOperationException 예외가 발생합니다.
Equals 및 hashCode 메서드는 SimpleEntry 와 일치합니다.
다음으로 AbstractMap 추상 클래스가 Map 인터페이스에서 어떤 메서드를 구현하는지 살펴보겠습니다.
Publicintsize ()
Map 에 정의된 entrySet 메서드는 Map 의 Set 컬렉션을 반환합니다. 항목, set set 를 직접 호출하는 size 메서드는 지도의 크기입니다.
PublicbooleanisEmpty ()
위의 size 메서드를 호출합니다. 0 이면 비어 있습니다.
Public boolean contains key (개체 키)
이 방법의 실현은 비교적 간단하다. 컬렉션 Set 의 반복자는 entrySet 메서드를 호출하여 맵을 순회하여 얻습니다. 항목을 입력하고 매개변수 키와 비교합니다. 매핑은 빈 키 값으로 저장할 수 있습니다. 키 = null 은 맵에 특별히 저장되기 때문에 (해시 값은 계산할 수 없음) 매개변수 키가 비어 있는지 여부도 여기에 결정됩니다.