일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 스프링
- 형변환
- table
- 오라클
- 자바스크립트
- set
- Oracle
- 개발
- 모바일게임
- spring
- 리액트
- 자바
- array
- JavaScript
- JSX
- url 변환
- 이름 마스킹
- SQL
- html
- jQuery
- JSTL
- Java
- 원펀맨: 최강의 남자
- 원펀맨
- forEach
- JS
- 배열
- React
- url 치환
- 맛집
Archives
- Today
- Total
특별한 일상
[Java] 컬렉션 프레임워크 List: ArrayList, LinkedList 차이 본문
반응형
이번 포스팅에서는 컬렉션 프레임워크의 List의 구현클래스인 ArrayList와 LinkedList의 차이와 반응성에 대해 간단하게 알아보겠습니다.
List 구현클래스...
1. ArrayList
컬렉션 프레임워크에서 가장 많이 쓰이고, 데이터의 저장순서가 유지되고 중복을 허용.
2. LinkedList
배열의 크기를 변경하고, 비순차적인 데이터의 추가와 삭제에 대해 복사하는 과정이 없으므로 처리속도가 빠름.
ArrayList Vs. LinkedList
순차적으로 추가 및 삭제하는 경우에는 ArrayList가 LinkedList 보다 빠름.
- 배열에 저장할 데이터의 갯수만큼 저장공간을 충분히 확보하는 경우.
- 마지막 데이터부터 역순으로 순차적으로 삭제해 재배치를 하지않을 경우.
비순차적으로 추가 및 삭제하는 경우에는 LinkedList가 ArrayList 보다 빠름.
- 비순차적인 데이터를 수정하는 경우 요소간의 연결만 변경해 주기 때문.
- 배열의 빈 공간을 채워할 필요가 없기 때문.
// 순차적으로 생성
public static long aryAdd(List list) {
long start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {
list.add(i + "");
}
long end = System.currentTimeMillis();
return end - start;
}
// 비순차적으로 생성
public static long aryMidAdd(List list) {
long start = System.currentTimeMillis();
for(int i = 0; i < 10000; i++) {
list.add(500, "X");
}
long end = System.currentTimeMillis();
return end - start;
}
// 순차적으로 삭제
public static long aryRemove(List list) {
long start = System.currentTimeMillis();
for(int i = list.size() -1; i >= 0; i--) {
list.remove(i);
}
long end = System.currentTimeMillis();
return end - start;
}
// 비순차적으로 삭제
public static long aryMidRemove(List list) {
long start = System.currentTimeMillis();
for(int i = 0; i < 10000; i++) {
list.remove(i);
}
long end = System.currentTimeMillis();
return end - start;
}
public static void main(String[] args) {
ArrayList aryList = new ArrayList(10000000);
LinkedList linkList = new LinkedList();
System.out.println("-- 순차적으로 추가 > ");
System.out.println("ArrayList : " + aryAdd(aryList) + " :: LinkedList : "+aryAdd(linkList));
System.out.println("-- 비순차적으로 추가 > ");
System.out.println("ArrayList : " + aryMidAdd(aryList) + " :: LinkedList : "+aryMidAdd(linkList));
System.out.println("-- 비순차적으로 삭제 > ");
System.out.println("ArrayList : " + aryMidRemove(aryList) + " :: LinkedList : "+aryMidRemove(linkList));
System.out.println("-- 순차적으로 삭제");
System.out.println("ArrayList : " + aryRemove(aryList) + " :: LinkedList : "+aryRemove(linkList));
}
>> 결과
-- 순차적으로 추가 >
ArrayList : 1128 :: LinkedList : 1814
-- 비순차적으로 추가 >
ArrayList : 9102 :: LinkedList : 32
-- 비순차적으로 삭제 >
ArrayList : 8071 :: LinkedList : 254
-- 순차적으로 삭제
ArrayList : 16 :: LinkedList : 43
※ ArrayList와 LinkedList를 비교하기 위해 데이터의 갯수를 크게 잡고 List add와 remove를 적용하였습니다.
위와 같이 데이터의 갯수를 크게 잡지 않으면 차이가 크게 발생하지 않는다.
결론은 순차적으로 추가 및 삭제시 ArrayList
비순차적인 추가 및 삭제는 LinkedList가 속도가 더 빠르다.
참조 - 강북쌍용교육센터 교육중..
'IT•개발 끄적 > Java' 카테고리의 다른 글
[JAVA] static, final, static final(상수) 사용법 및 예시 (0) | 2021.06.15 |
---|---|
[JAVA] HTML, MVC, Servlet 환경에서 특수문자 치환( < > & ...) (0) | 2021.06.09 |
[Java] 문자열(String) 대소문자 변환 및 비교(toUpperCase, toLowerCase) (0) | 2021.05.04 |
[java] 최대공약수 최소공배수 구하기 (0) | 2021.04.25 |
[java] 오버로딩, 오버라이딩 사용법, 차이점 (0) | 2021.04.24 |
Comments