import java.util.ArrayList;
public class Ex60_List {
public static void main(String[] args) {
//선언
ArrayList<String> list = new ArrayList<String>();
//1. 요소 추가하기
list.add("바나나");
list.add("딸기");
list.add(1, "망고");
//2. 요소 접근(읽기)
System.out.println(list.get(0)); //바나나
//3. 요소의 개수
System.out.println(list.size()); //3
//4. 요소 수정
String temp = list.set(0, "딸바"); //변경 전 데이터를 저장한다.
System.out.println(temp); //바나나
//5. 요소 삭제
list.remove(2);
//6. 기타
System.out.println(list.indexOf("포도")); //-1
System.out.println(list.indexOf("망고")); //1
System.out.println(list.lastIndexOf("딸바")); //0
System.out.println(list.contains("망고")); //true
System.out.println(list.isEmpty()); //false
System.out.println(list.toString()); //[딸바, 망고]
System.out.println(list); //[딸바, 망고]
바나나
3
바나나
-1
1
0
true
false
[딸바, 망고][딸바, 망고]
ArrayList<Integer> list1 = new ArrayList<Integer>();
LinkedList<Integer> list2 = new LinkedList<Integer>();
long begin = 0, end = 0;
//순차적으로 데이터 추가하기, Append
System.out.println("[순차적으로 데이터 추가하기, Append]");
begin = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
list1.add(i); //배열끝에 추가하기
}
end = System.currentTimeMillis();
System.out.printf("ArrayList 작업 시간: %,dms\n", end - begin);
begin = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
list2.add(i); //배열끝에 추가하기
}
end = System.currentTimeMillis();
System.out.printf("LinkedList 작업 시간: %,dms\n", end - begin);
System.out.println();
//중간 데이터 추가하기(삽입), Insert
System.out.println("[중간 데이터 추가하기(삽입), Insert]");
begin = System.currentTimeMillis();
for (int i=0; i<10000; i++) {
list1.add(0, i); //삽입하기
}
end = System.currentTimeMillis();
System.out.printf("ArrayList 작업 시간: %,dms\n", end - begin);
begin = System.currentTimeMillis();
for (int i=0; i<10000; i++) {
list2.add(0, i); //삽입하기
}
end = System.currentTimeMillis();
System.out.printf("LinkedList 작업 시간: %,dms\n", end - begin);
System.out.println();
// 중간 데이터 삭제하기, delete
System.out.println("[중간 데이터 삭제하기, delete]");
begin = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
list1.remove(0); // 삭제하기
}
end = System.currentTimeMillis();
System.out.printf("ArrayList 작업 시간: %,dms\n", end - begin);
begin = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
list2.remove(0); // 삭제하기
}
end = System.currentTimeMillis();
System.out.printf("LinkedList 작업 시간: %,dms\n", end - begin);
System.out.println();
// 끝에서부터 삭제하기, delete
System.out.println("[끝에서부터 삭제하기, delete]");
begin = System.currentTimeMillis();
for (int i = list1.size()-1; i >=0; i--) {
list1.remove(i); // 삭제하기
}
end = System.currentTimeMillis();
System.out.printf("ArrayList 작업 시간: %,dms\n", end - begin);
begin = System.currentTimeMillis();
for (int i = list2.size()-1; i >=0; i--) {
list2.remove(i); // 삭제하기
}
end = System.currentTimeMillis();
System.out.printf("LinkedList 작업 시간: %,dms\n", end - begin);
[순차적으로 데이터 추가하기, Append]
ArrayList 작업 시간: 35ms
LinkedList 작업 시간: 119ms
[중간 데이터 추가하기(삽입), Insert]
ArrayList 작업 시간: 2,137ms
LinkedList 작업 시간: 1ms
[중간 데이터 삭제하기, delete]
ArrayList 작업 시간: 1,798ms
LinkedList 작업 시간: 1ms
[끝에서부터 삭제하기, delete]
ArrayList 작업 시간: 8ms
LinkedList 작업 시간: 16ms
Shift 작업이 이뤄지는 데이터 추가, 삭제에서 LikedList보다 ArrayList에서 훨씬 시간이 많이 걸리는 것을 볼 수 있다.