[Java 집합의 List] Array List 와 LinkedList 의 차이 점
7334 단어 자바 핵심
Array List 와 LinkedList 는 모두 List 인 터 페 이 스 를 실 현 했 는데 대체적으로 다음 과 같다.
이제 자세 한 테스트 를 해 보도 록 하 겠 습 니 다.
테스트
/**
* @ :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 를 사용 해 야 합 니 다.