머리말
데이터베이스 연결 풀 분석의 코드 예제에서는 Enumeration을 사용하여 Vector 컬렉션을 순회하는 것을 볼 수 있습니다. 나중에 컬렉션 클래스를 탐색하는 데 어떤 메서드를 사용할 수 있는지 알아보기 위해 몇 가지 정보를 찾았습니다. 인터넷에서 컬렉션 클래스를 탐색하기 위해 Enumeration 및 Iterator를 사용하는 다음 예제를 찾았습니다. 그러나 이 예제에서는 Enumeration이 Iterator보다 더 효율적이라고 언급했습니다. 실제로는 그렇지 않습니다 . 이 예제의 시간 테스트는 데이터 양이 너무 적기 때문에 너무 일방적입니다. 데이터의 수가 증가할수록 둘 사이의 효율성은 배수의 비율이 나타나지 않고 점점 더 가까워집니다. 게다가 이제 Iterator는 컬렉션 클래스를 순회하는 데 일반적으로 사용됩니다. Enumeration을 사용해야 한다고 구체적으로 선언한 경우에만 이 클래스를 사용하여 컬렉션을 순회합니다.
코드 예시
다음과 같이 코드 코드를 복사합니다 .
패키지 edu.sjtu.erplab.hash;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map.Entry;
//순회 해시테이블 인스턴스
공개 클래스 TraveseHashTable {
공개 정적 무효 메인(String[] args) {
//해시테이블 초기화 및 생성
Hashtable<String, String> ht = new Hashtable<String, String>();
for (int i = 0; i < 10000; i++) {
ht.put("Key=" + i, "Val=" + i);
}
// 1. 열거형 사용
긴 시작 = System.currentTimeMillis();
Enumeration<String> en = ht.keys();//열거를 사용하여 키 가져오기
동안(en.hasMoreElements()) {
en.nextElement();
}
긴 끝 = System.currentTimeMillis();
System.out.println("열거 키 비용 " + (end - start)
+ "밀리초");
// 2. 열거형 사용
시작 = System.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//열거를 사용하여 이 키-값 쌍을 가져옵니다.
동안(en2.hasMoreElements()) {
en2.nextElement();
}
end = System.currentTimeMillis();
System.out.println("열거 요소 비용 " + (end - start)
+ "밀리초");
// 3. 반복자
시작 = System.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//이 키를 얻으려면 반복자를 사용하세요
동안(it.hasNext()) {
it.next();
}
end = System.currentTimeMillis();
System.out.println("반복기 키 세트 비용 " + (end - start)
+ "밀리초");
// 4. 반복자
시작 = System.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//이 키-값 쌍을 얻으려면 반복자를 사용하십시오.
동안(it2.hasNext()) {
it2.next();
}
end = System.currentTimeMillis();
System.out.println("반복자 EntrySet 비용 " + (end - start)
+ "밀리초");
}
}
더 이상 사용되지 않는 인터페이스: 열거
Enumeration 인터페이스는 JDK 1.0에서 도입되었으며 최고의 반복 출력 인터페이스입니다. Vector가 처음 사용되었을 때(현재 ArrayList 권장) 출력에는 Enumeration 인터페이스가 사용되었습니다. Enumeration은 오래된 클래스이지만 JDK1.5 이후에는 Enumeration 클래스가 확장되어 일반 작업 응용 프로그램을 추가했습니다.
Enumeration 인터페이스의 일반적으로 사용되는 메서드에는 hasMoreElements()(다음 값이 있는지 확인) 및 nextElement()(현재 요소 제거)가 포함됩니다. 이러한 메서드의 기능은 다음을 수행하는 메서드가 있다는 점을 제외하면 Iterator와 유사합니다. Iterator에서 데이터를 삭제하지만 이 인터페이스에는 삭제 작업이 없습니다.
Enumeration 인터페이스를 계속 사용하는 이유는 무엇입니까?
Enumeration과 Iterator 인터페이스는 비슷한 기능을 가지고 있으며 Iterator는 Enumeration보다 더 많은 기능을 가지고 있는데 왜 Enumeration을 사용합니까? 이는 Java 개발에 오랜 시간이 걸렸고 클래스 라이브러리의 일부 오래된 시스템이나 메서드가 여전히 Enumeration 인터페이스를 사용하기 때문입니다. 따라서 호환성을 위해서는 여전히 Enumeration을 사용해야 합니다.
List 인터페이스의 공통 서브클래스
List 인터페이스의 일반적으로 사용되는 하위 클래스에는 ArrayList와 Vector가 포함됩니다. 두 클래스 사이의 비교는 아래에 나와 있습니다.