JDK 문서의 RandomAccess 인터페이스의 정의는 다음과 같습니다. public interface RandomAccess
다음은 JDK의 주석을 번역하는 것입니다
목록은 빠른 (일반적으로 고정 시간) 임의의 액세스를 지원한다는 것을 나타내는 데 사용되는 태깅 인터페이스를 구현합니다. 이 인터페이스의 주요 목적은 일반 알고리즘이 동작을 변경하여 무작위 또는 연속 액세스 목록에 적용될 때 우수한 성능을 제공하는 것입니다.
임의의 액세스 목록 (예 : Arraylist)을 연속 액세스 목록 (예 : LinkedList)에 작동하기위한 최상의 알고리즘을 적용하면 2 차 항의 동작을 생성 할 수 있습니다. 알고리즘이 연속 액세스 목록에 적용되는 경우 일반 목록 알고리즘을 사용하여 성능이 저하 될 수있는 알고리즘을 적용 할 수있는 알고리즘을 적용하기 전에 주어진 목록 이이 인터페이스의 인스턴스인지 확인하고 허용 가능한 성능이 필요한 경우 동작을 변경하는 것이 좋습니다.
임의의 접근과 연속 액세스의 차이는 종종 모호하다는 것이 이제 인식되었습니다. 예를 들어, 목록이 크면 일부 목록 구현은 증분 선형 액세스 시간을 제공하지만 실제로 고정 액세스 시간입니다. 이러한 목록 구현은 일반적 으로이 인터페이스를 구현해야합니다.
강조 : JDK에서 권장되는 것은 목록 컬렉션에 대해 RandomAccess 인터페이스를 가능한 한 많이 구현하는 것입니다.
컬렉션 클래스가 RandomAccess의 구현 인 경우, 반복자 반복기 대신 (int i = 0; i <size; i ++)를 위해이를 통과하십시오.
반대로, 목록이 시퀀스 목록 인 경우 반복자와 반복하는 것이 가장 좋습니다.
JDK에서 목록의 트래버스 알고리즘, 특히 거대한 크기에서 RandomAccess (예 : Arraylist) 또는 시퀀스 목록 (예 : LinkedList)에 속하는지 여부를 결정해야한다는 것이 명백합니다. RandomAccess 목록에 적합한 트래버스 알고리즘은 시퀀스 목록에서 사용될 때 매우 다르기 때문입니다. 일반적으로 사용되는 방법은 다음과 같습니다.
판단하기 위해 :
if (randomaccess의 목록 인스턴스) {for (int m = 0; m <list.size (); m ++) {}} else {iterator iter = list.iterator (); while (iter.hasnext ()) {}}시험:
public class testrandomAccess {@test public void testtraverse () {arraylist <integer> arraylist = new ArrayList <integer> (); LinkedList <integer> linkedList = new LinkedList <integer> (); initlist (ArrayList, 1000); Initlist (LinkedList, 1000); System.out.println ( "ArrayList는 RandomAccess 인터페이스를 구현"); imprandomaccesstraverse (arraylist); // System.out.println에 10ms가 걸렸습니다 ( "LinkedList는 RandomAccess 인터페이스를 구현하지 않습니다"); Imprandomaccesstraverse (LinkedList); // System.out.println에 434ms가 걸렸습니다 ( "/narraylist는 randomAccess 인터페이스를 구현하지 않습니다"); noimplrandomaccesstraverse (arraylist); // System.out.println에 39ms가 걸렸습니다 ( "LinkedList는 RandomAccess 인터페이스를 구현하지 않습니다"); noimplrandomaccesstraverse (LinkedList); //} 개인 장거리 시작 시간 = 0까지 27ms가 걸렸습니다. 비공개 장기 = 0; // 목록 초기화 public void initList (list <integer> list, int n) {for (int i = 0; i <n; i ++) {list.add (i); }} // RandomAccess 인터페이스, 공개 void inmprandomaccesstraverse (목록)를 구현하는 모든 데이터의 트래버스가 있습니다. for (int count = 0; count <= 1000; count ++) {for (int i = 0; i <list.size (); i ++) {list.get (i); }} endTime = System.CurrentTimeMillis (); System.out.println ( "루프를 사용하여 총 반복이 필요했습니다." + (EndTime -StartTime) + "MS Time"); } // RandomAccess 인터페이스를 구현하지 않고 모든 데이터의 트래버스는 공개 void noimplrandomaccesstraverse (목록 목록) {startTime = System.CurrentTimeMillis (); for (int count = 0; count <= 1000; count ++) {for (iterator itr = list.iterator (); itr.hasnext ();) {itr.next (); }} endTime = System.CurrentTimeMillis (); System.out.println ( "반복자를 사용하여 총 반복이 필요했습니다." + (EndTime -StartTime) + "MS Time"); }}Java 인터페이스 RandomAccess에 대한 위의 포괄적 인 이해는 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.