java - RandomAccess 인터페이스, 왜 메소드가 없습니까?

기사 출처 java collections random-access

Collections.shuffle(List) javadoc를 읽고 나서 RandomAccess javadoc를 살펴 보았습니다.


List 구현에서 사용하는 마커 인터페이스는
빠른 (일반적으로 일정한 시간) 임의 액세스를 지원합니다. [...]


이 인터페이스 (예 : Serializable)에 메서드가없는 이유가 궁금합니다. 이것에 대한 디자인 이유는 무엇입니까?

Lists 만이 인터페이스를 "구현"하더라도 E get()를 메서드로 설정하지 않는 이유는 무엇입니까? 모든 목록이 랜덤 액세스가 아니라는 것을 알고 있지만 메서드가없는 경우이 인터페이스를 어떻게 사용할 수 있습니까?

이 같은:

if(object instanceof RandomAccess){
    // should I cast it if no operations can be done? why?
}


또한 목록 만 RandomAccess가 될 수 있습니까? 파일은 어떻습니까?
"마커"인터페이스는 주석보다 앞서있는 기술입니다. 이것은 클래스를 어떤 표준을 준수하는 것으로 표시하는 것을 의미하며, 표준은 메소드에 관한 것이 아닙니다.

이 경우 Shuffle은 빠른 임의 액세스를 지원하지 않는 목록에서 다르게 작동 할 수 있습니다. 연결 목록을 섞는 방법을 고려하십시오. 힘들죠? 다음 요소에 대한 포인터를 따라 목록을 살펴 보지 않고 "get me a random element"라고 말할 수는 없습니다. 이제 이것을 ArrayList와 대조하십시오. 목록이 저장되는 방식 때문에 임의의 요소를 얻는 것이 훨씬 쉽습니다.

메서드 이름에서 "목록이 저장되는 방법"또는 "다른 액세스 패턴이 얼마나 빠르거나 느린 지"를 한정하는 방법은 없습니다. 따라서 대신 Java는 마커 인터페이스를 사용하여이 정보를 제공합니다.

이 경우 ArrayList는 RandomAccess이고 LinkedList는 그렇지 않습니다.

편집하다

마커 인터페이스와 마커 주석의 차이점에 관심이있는 사람들은 Joshua Bloch의 Effective Java 2nd Edition에서 항목 37 : "마커 인터페이스를 사용하여 유형 정의"를 즐길 수 있습니다.

이 질문에 대해 Stack Overflow에서 비슷한 토론을 찾았습니다: https://stackoverflow.com/questions/13547789/

관련 기사
java - 자바에서 정수 비교
enums - Java API에서 열거 형 사용
java - charAt ()은 문자열을 반환하지 않습니까?
java - ArrayIndexOutOfBoundsException 데이터 액세스 시도
java - Java의 내부 클래스에서 변수에 액세스
java - 날짜 시간 형식 Java로 시간 추가
java - Java 인터페이스에 대한 Java 특성 파일 바인딩
java - "리소스로 시도"에 문제가 있음
java - 배포 (게시) 후 Weblogic 오류 : 오류 503-- 서비스를 사용할 수 없음
java - Java의 arraylist에 대용량 파일을로드하는 가장 좋은 방법