Vector, ArrayList, LinkedList 의 삭제 효율 비교

11452 단어
1. Vector, ArrayList 는 동적 배열 을 바탕 으로 하 는 데이터 구 조 를 실현 하고 LinkedList 는 링크 를 바탕 으로 하 는 데이터 구 조 를 실현 한다. 2. 집합 데 이 터 를 방문 할 때 LinkedList 는 지침 을 이동 하여 한 끝 에서 다른 한 끝 으로 찾 아야 하 며 효율 이 낮 습 니 다. 3. add 와 remove 작업 을 추가 하고 삭제 합 니 다. linkedList 비용 은 통일 되 고 Entry 대상 을 분배 합 니 다.그러나 Vector 와 Array List 에 대해 서 는 끝부분 에서 데 이 터 를 조작 할 때 비용 이 고정 되 어 있 지만 끝 에 있 지 않 으 면 배열 이 재 분 배 될 수 있 고 끝 에 일정한 용량 공간 을 남 길 수 있 습 니 다.

package
list; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Vector; public class listT1 {   public static void main(String[] args) {     List vector = new Vector();     List arrayList = new ArrayList();     List linkedList = new LinkedList();     int listSize = 50000;     int searchOrRemoveSize = 2000;     long vectorStartTime = 0;     long vectorEndTime = 0;     long arrayListStartTime = 0;     long arrayListEndTime = 0;     long linkedListStartTime = 0;     long linkedListEndTime = 0;     String[] listType = { "vector", "arrayList", "linkedList" };     long[][] listData = new long[3][4];     /** start */     vectorStartTime = System.currentTimeMillis();     for (int i = 0; i < listSize; i++) {       vector.add(i);     }     vectorEndTime = System.currentTimeMillis();     listData[0][0] = vectorEndTime - vectorStartTime;     arrayListStartTime = System.currentTimeMillis();     for (int i = 0; i < listSize; i++) {       arrayList.add(i);     }     arrayListEndTime = System.currentTimeMillis();     listData[1][0] = arrayListEndTime - arrayListStartTime;     linkedListStartTime = System.currentTimeMillis();     for (int i = 0; i < listSize; i++) {       linkedList.add(i);     }     linkedListEndTime = System.currentTimeMillis();     listData[2][0] = linkedListEndTime - linkedListStartTime;     /** end */     /** start */     vectorStartTime = System.currentTimeMillis();     for (int i = 0; i < listSize; i++) {       vector.add(0, i);     }     vectorEndTime = System.currentTimeMillis();     listData[0][1] = vectorEndTime - vectorStartTime;     arrayListStartTime = System.currentTimeMillis();     for (int i = 0; i < listSize; i++) {       arrayList.add(0, i);     }     arrayListEndTime = System.currentTimeMillis();     listData[1][1] = arrayListEndTime - arrayListStartTime;     linkedListStartTime = System.currentTimeMillis();     for (int i = 0; i < listSize; i++) {       linkedList.add(0, i);     }     linkedListEndTime = System.currentTimeMillis();     listData[2][1] = linkedListEndTime - linkedListStartTime;     /** end */     /** start */     vectorStartTime = System.currentTimeMillis();     for (int i = 0; i < searchOrRemoveSize; i++) {       vector.get(i);     }     vectorEndTime = System.currentTimeMillis();     listData[0][2] = vectorEndTime - vectorStartTime;     arrayListStartTime = System.currentTimeMillis();     for (int i = 0; i < searchOrRemoveSize; i++) {       arrayList.get(i);     }     arrayListEndTime = System.currentTimeMillis();     listData[1][2] = arrayListEndTime - arrayListStartTime;     linkedListStartTime = System.currentTimeMillis();     for (int i = 0; i < searchOrRemoveSize; i++) {       linkedList.get(i);     }     linkedListEndTime = System.currentTimeMillis();     listData[2][2] = linkedListEndTime - linkedListStartTime;     /** end */     /** start */     vectorStartTime = System.currentTimeMillis();     for (int i = 0; i < searchOrRemoveSize; i++) {       vector.remove(i);     }     vectorEndTime = System.currentTimeMillis();     listData[0][3] = vectorEndTime - vectorStartTime;     arrayListStartTime = System.currentTimeMillis();     for (int i = 0; i < searchOrRemoveSize; i++) {       arrayList.remove(i);     }     arrayListEndTime = System.currentTimeMillis();     listData[1][3] = arrayListEndTime - arrayListStartTime;     linkedListStartTime = System.currentTimeMillis();     for (int i = 0; i < searchOrRemoveSize; i++) {       linkedList.remove(i);     }     linkedListEndTime = System.currentTimeMillis();     listData[2][3] = linkedListEndTime - linkedListStartTime;     /** end */     for (int i = 0; i < listData.length; i++) {       long[] arr = listData[i];       System.out.print(listType[i] + " (" + listSize + ")、 ("         + listSize + ")、 (" + searchOrRemoveSize + ")、 ("         + searchOrRemoveSize + ") ( ):");       for (int j = 0; j < arr.length; j++) {         System.out.print(arr[j] + " ");       }       System.out.println();     }     /**     * , :     * vector (100000)、 (100000)、 (5000)、 (5000) ( ):17 13638 0 895     * arrayList (100000)、 (100000)、 (5000)、 (5000) ( ):25 14224 0 898     * linkedList (100000)、 (100000)、 (5000)、 (5000) ( ):44 16 36 71     *     *     * vector (50000)、 (50000)、 (2000)、 (2000) ( ):7 3443 0 183     * arrayList (50000)、 (50000)、 (2000)、 (2000) ( ):7 3507 0 187     * linkedList (50000)、 (50000)、 (2000)、 (2000) ( ):8 43 6 11     *     */   } }

작업 이 한 열 데이터 뒤에 데 이 터 를 추가 하 는 것 이지 앞 이나 중간 (집합 용량 1 / 5 정도) 이 아니 라 그 중의 요 소 를 무 작위 로 방문 해 야 할 때 Vector (스 레 드 안전) 를 사용 하면 Array List 는 비교적 좋 은 성능 을 제공 합 니 다.
한 열 데이터 의 앞 이나 중간 (집합 용량 1 / 5 정도) 에 데 이 터 를 추가 하거나 삭제 하고 그 중의 요 소 를 순서대로 방문 할 때 LinkedList 를 사용 해 야 합 니 다.
다음으로 전송:https://www.cnblogs.com/wcj112/p/3573794.html

좋은 웹페이지 즐겨찾기