Closed zpqmdh closed 1 month ago
Q.
ordinal 메서드를 EnumSet 과 EnumMap 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다고 하는데, 열거 타입 기반의 범용 자료구조에서 어떻게 ordinal 메서드를 사용하고 있는지 예시를 들어주실 수 있나요?
A. 아래는 EnumSet의 구현체인 JumboEnumSet의 구현 코드 일부입니다.
void addRange(E from, E to) {
int fromIndex = from.ordinal() >>> 6;
int toIndex = to.ordinal() >>> 6;
if (fromIndex == toIndex) {
elements[fromIndex] = (-1L >>> (from.ordinal() - to.ordinal() - 1))
<< from.ordinal();
} else {
elements[fromIndex] = (-1L << from.ordinal());
for (int i = fromIndex + 1; i < toIndex; i++)
elements[i] = -1;
elements[toIndex] = -1L >>> (63 - to.ordinal());
}
size = to.ordinal() - from.ordinal() + 1;
}
start
와 end
정수 값이 필요합니다.
모든 열거 타입은 해당 상수가 그 열거 타입에서 몇 번째 위치인지 반환하는
ordinal
이라는 메서드를 제공합니다. 하지만, 여러 문제점 때문에 프로그래머가 이 메서드를 직접 사용할 일은 없다고 책 221페이지에서 언급하고 있습니다.ordinal
메서드를EnumSet
과EnumMap
같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다고 하는데, 열거 타입 기반의 범용 자료구조에서 어떻게ordinal
메서드를 사용하고 있는지 예시를 들어주실 수 있나요?