Integer[] arr = new Integer[]{1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
종류 | add() | remove() | get() | contains() |
---|---|---|---|---|
ArrayList | O(1) | O(n) | O(1) | O(n) |
LinkedList | O(1) | O(1) | O(n) | O(n) |
CopyOnWriteArrayList | O(n) | O(n) | O(1) | O(n) |
💡 ArrayList에서 add는 O(1)이지만, capacity를 넘어 배열복사가 발생할 경우 O(n)이 됨
💡 LinkedList에서 특정 요소를 삭제하는 경우는 O(1)이지만, 요소를 찾아서 삭제해야 할 경우 O(n)이 됨
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
// LinkedList
// ArrayList(synchronized X) - index에 빠르게 접근해야할 때
// Vector(synchronized O) - index에 빠르게 접근하되 thread safe 해야 할 때
public class practiceList {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
// 리스트 요소 추가
list.add(1);
list.add(2);
list.add(3);
System.out.println(list); // [1, 2, 3]
list.add(1, 10); // [1, 10, 2, 3]
System.out.println(list);
// 해당 인덱스의 값 반환
System.out.println(list.get(1)); // 10
// 인덱스로 값 변경
list.set(1, 4);
System.out.println(list); // [1, 4, 2, 3]
// 인덱스로 값 찾기
System.out.println(list.indexOf("3")); // 3
System.out.println(list.lastIndexOf("3")); // 3
// 인덱스로 값 삭제
list.remove(1);
System.out.println(list); // [1, 2, 3]
// 값 포함하는지
System.out.println(list.contains(4)); // false
// Array로 변환 1
System.out.println(list.toArray()); // [Ljava.lang.Object;@1540e19d
// Array로 변환 2
System.out.println(list.stream().mapToInt(Integer::intValue).toArray()); // [I@58372a00
// 배열 비우기
list.clear(); // []
// 배열 비었는지 확인
System.out.println(list.isEmpty()); // true
// 두 리스트 합치기
ArrayList<Integer> a1 = new ArrayList<>();
a1.add(1);
a1.add(2);
a1.add(3);
ArrayList<Integer> a2 = new ArrayList<>();
a2.add(4);
a2.add(5);
a2.add(6);
a1.addAll(a2);
System.out.println(a1); // [1, 2, 3, 4, 5, 6]
// a1이 a2를 포함하는지
System.out.println(a1.containsAll(a2)); // true
// 해당 요소 제외하고 모두 지우기
a1.retainAll(a2);
System.out.println(a1); // [4, 5, 6]
// 전체 조회 1
Iterator<Integer> iterator = a1.iterator();
while(iterator.hasNext()) {
int i = iterator.next();
System.out.print(i + " "); // 4 5 6
}
// 전체 조회 2
for(int i = 0; i < a1.size(); i++) {
System.out.print(a1.get(i) + " "); // 4 5 6
}
}
}
Object[] 타입
으로 배열을 생성하여 사용함노드
(데이터와 주소로 이루어진 클래스)를 만들어 서로 연결함, 즉 이전 노드와 다음 노드를 연결함동기화
를 지원함