이 기사의 주요 연구는 Java의 서수 지수 대신 Enummap의 관련 내용이며, 다음과 같이 소개됩니다.
연구 노트 "효과적인 Java Chinese Edition 2"
Enum의 서수 방법을 사용하여 Enum 유형을 색인화하는 경우가 종종 있습니다.
공개 클래스 허브 {public enum type {연간, 다년생, Biennial}; 개인 최종 문자열 이름; 개인 최종 유형 유형; 허브 (문자열 이름, 유형 유형) {this.name = 이름; this.type = 유형; } @override public String toString () {return name; }}이제이 식물을 나열하기 전에 유형 (연간, 다년생 또는 2 년마다)별로 조직하려는 정원에 식물을 나타내는 허브 배열이 있다고 가정 해 봅시다. 이 작업을 수행하려면 각 유형마다 하나씩 세 개의 세트를 만들고 전체 정원을 반복하여 각 허브를 해당 세트에 넣어야합니다. 일부 프로그래머는 이러한 세트를 서수 수의 유형에 의해 색인화 된 배열에 넣어이를 수행합니다.
// ordinal ()을 사용하여 배열을 색인화하지 마십시오. for (int i = 0; i <herbsbytype.length; i ++) {herbsbytype [i] = new Hashset <heb> ();} for (herb h : garden) {herbsbytype [h.type.ordinal ()]. add (h);} // 결과를 인쇄합니다 (int i = 0; i <Herbsbype.) System.out.printf ( "%s :%s%n", herb.type.values () [i], HerbsbyType [i]);}이 방법은 실제로 실현 가능하지만 많은 문제를 숨 깁니다. 배열은 제네릭과 호환되지 않기 때문입니다. 이 프로그램은 확인되지 않은 변환을 수행해야하며 올바르게 컴파일 할 수 없습니다. 배열은 인덱스의 표현을 알지 못하므로 이러한 인덱스의 출력에 수동으로 레이블을 지정해야합니다. 그러나이 방법의 가장 심각한 문제는 열거 된 숫자로 인덱스 된 배열에 액세스 할 때 올바른 int 값을 사용하는 것이 귀하의 책임이라는 것입니다. INT는 열거에 대한 유형 안전을 제공 할 수 없습니다. 잘못된 값을 사용하면 프로그램이 잘못된 작업을 조용히 완료하거나 운이 좋으면 ArrayinDexOutoFBoundException 예외를 던집니다.
java.util.enummap은 열거에 특별히 사용되는 매우 빠른 맵 구현입니다.
// ENUMMAP을 사용하여 데이터를 EnumMap <herb.type로 연결하고 <herbsbytype = new enummap <herb.type, set <herb >> (herb.type.class); for (herb.type t : herb.type.values) herbsbytype.put (t, new Hashset <heb> ()); for (Herb H : Garden) HerbsbyType.get (h.type) .add (h); System.out.println (HerbsbyType);
이 프로그램은 짧고 명확하며 안전하며 서수를 사용하는 프로그램의 속도와 비슷한 속도로 실행할 수 있습니다. 안전하지 않은 전환이 없습니다. 매핑 키는 인쇄 가능한 문자열의 열거로 변환하는 방법을 알고 있기 때문에 이러한 인덱스의 출력에 수동으로 레이블을 지정할 필요는 없습니다. 배열 인덱스를 계산할 때 실수를하는 것도 불가능합니다 . ENUMMAP가 달리기 속도 측면에서 서수 인덱스를 통해 인덱스 된 배열과 비슷한 이유는 ENUMMAP 이이 배열을 내부적으로 사용하기 때문입니다. 그러나 그것은 맵과 타입 안전의 풍부한 기능을 배열 속도와 결합하여 프로그래머로부터 이런 종류의 생각 세부 사항을 숨 깁니다. EnumMap 생성자는 키 유형 클래스 객체를 사용합니다. 런타임 일반 정보를 제공하는 제한된 유형 토큰입니다.
요약
위의 내용은 Java의 서수 색인 코드 대신 Enummap에 대한 자세한 설명입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!