[Java 집합의 List] Array List 와 LinkedList 의 차이 점

7334 단어 자바 핵심
머리말
Array List 와 LinkedList 는 모두 List 인 터 페 이 스 를 실 현 했 는데 대체적으로 다음 과 같다.
  • ArrayList 는 동적 배열 을 바탕 으로 하 는 데이터 구 조 를 실현 하고 LinkedList 는 링크 를 바탕 으로 하 는 데이터 구 조 를 실현 했다.
  • 랜 덤 액세스 get 과 set 에 대해 Array List 는 LinkedList 보다 낫다 고 생각 합 니 다. LinkedList 는 지침 을 이동 해 야 하기 때 문 입 니 다.
  • 추가 및 삭제 작업 add 와 reove 에 대해 서 는 linedList 가 우세 합 니 다. ArrayList 가 데 이 터 를 이동 해 야 하기 때 문 입 니 다.

  • 이제 자세 한 테스트 를 해 보도 록 하 겠 습 니 다.
    테스트
    /**
     * @  :List  
     * @  :CYH
     * @  :V1.0
     * @    ::2016-12-20
     */
    public class ListTest {
        /**@    :
         * @param args void
         */
        public static void main(String[] args) {
            List list = new ArrayList();
            List link = new LinkedList();
    
            //   ArrayList
            long start = System.currentTimeMillis();
            Random random = new Random();
            for(int i=0; i<10000000; i++){
                list.add(random.nextInt(10000000));
            }
            long end = System.currentTimeMillis();
            long time = end - start;
            System.out.format("   ArrayList  :%d  
    "
    , time); // LinkedList start = System.currentTimeMillis(); for(int i=0; i<10000000; i++){ link.add(random.nextInt(10000000)); } end = System.currentTimeMillis(); time = end - start; System.out.format(" LinkedList :%d
    "
    , time); // ArrayList start = System.currentTimeMillis(); for(int i=0; i<10; i++){ list.get(random.nextInt(1000000)); } end = System.currentTimeMillis(); time = end - start; System.out.format("ArrayList :%d
    "
    , time); // LinkedList start = System.currentTimeMillis(); for(int i=0; i<10; i++){ link.get(random.nextInt(1000000)); } end = System.currentTimeMillis(); time = end - start; System.out.format("LinkedList :%d
    "
    , time); // ArrayList start = System.currentTimeMillis(); for(int i=0; i<100; i++){ list.add(1000, list.get(random.nextInt(1000000))); } end = System.currentTimeMillis(); time = end - start; System.out.format("ArrayList :%d
    "
    , time); // ArrayList start = System.currentTimeMillis(); for(int i=0; i<100; i++){ link.add(1000, list.get(random.nextInt(1000000))); } end = System.currentTimeMillis(); time = end - start; System.out.format("LinkedList :%d
    "
    , time); // ArrayList start = System.currentTimeMillis(); for(int i=0; i<100; i++){ list.remove(random.nextInt(1000000)); } end = System.currentTimeMillis(); time = end - start; System.out.format("ArrayList :%d
    "
    , time); // ArrayList start = System.currentTimeMillis(); for(int i=0; i<100; i++){ link.remove(random.nextInt(1000000)); } end = System.currentTimeMillis(); time = end - start; System.out.format("LinkedList :%d
    "
    , time); } }

    테스트 실행 입력 결과:
    ArrayList 초기 화 소요 시간: 3656 초 LinkedList 초기 화 소요 시간: 4869 초 ArrayList 랜 덤 추출 소요 시간: 0 초 LinkedList 랜 덤 추출 소요 시간: 73 초 ArrayList 랜 덤 삽입 소요 시간: 884 초 LinkedList 랜 덤 삽입 소요 시간: 0 초 ArrayList 랜 덤 삭제 소요 시간: 855 초 LinkedList 랜 덤 삭제 소요 시간: 431 초
    ArrayList 의 생 성 비용 은 LinkedList 보다 약간 적 습 니 다.랜 덤 액세스 ArrayList 는 LinkedList 보다 효율 이 높 습 니 다.랜 덤 으로 ArrayList 를 삽입 하고 삭제 하 는 것 은 LinkedList 보다 효율 이 훨씬 낮 습 니 다.
    ArrayList 의 내부 구현 은 기본 적 인 대상 배열 을 기반 으로 하기 때문에 get 방법 으로 목록 의 임의의 요 소 를 방문 할 때 (random access) 링크 드 List 보다 속도 가 빠르다.링크 드 리스트 의 get 방법 은 목록 의 한 끝 에서 다른 한 끝 까지 순서대로 검사 하 는 것 입 니 다.링크 목록 에 있 는 지정 한 요 소 를 방문 하 는 것 은 더 빠 른 방법 이 없습니다.
    총결산
    Array List 와 LinkedList 는 성능 에 있어 각각 장단 점 이 있 고 각자 적용 되 는 부분 이 있 습 니 다. 전체적으로 말 하면 1. Array List 와 LinkedList 에 대해 목록 말미 에 하나의 요소 비용 을 추가 하 는 것 은 고정 적 입 니 다.Array List 는 주로 내부 배열 에 하 나 를 추가 하고 추 가 된 요 소 를 가리 키 며 가끔 배열 을 재배 치 할 수 있 습 니 다.LinkedList 라 는 비용 은 통일 되 어 내부 Entry 대상 을 분배 합 니 다.2. Array List 의 중간 에 원 소 를 삽입 하거나 삭제 하 는 것 은 이 목록 에 남 은 요소 가 이동 하 는 것 을 의미 합 니 다.링크 드 리스트 의 중간 에 요 소 를 삽입 하거나 삭제 하 는 비용 은 고정 되 어 있 습 니 다.3. LinkedList 는 효율 적 인 무 작위 요소 접근 을 지원 하지 않 습 니 다.4. ArrayList 의 공간 낭 비 는 주로 list 목록 의 끝 에 일정한 용량 공간 을 남 겨 두 는 데 나타 나 고 LinkedList 의 공간 소 비 는 모든 요소 가 상당 한 공간 을 소모 해 야 한 다 는 데 나타난다.
    작업 이 열 데이터 뒤에 데 이 터 를 추가 하 는 것 이지 앞 이나 중간 이 아 닌 무 작위 로 요 소 를 방문 해 야 할 때 Array List 를 사용 하면 좋 은 성능 을 제공 합 니 다.데이터 의 앞 이나 중간 에 데 이 터 를 추가 하거나 삭제 하고 그 요소 에 순서대로 접근 할 때 LinkedList 를 사용 해 야 합 니 다.

    좋은 웹페이지 즐겨찾기