List Collection

홍정완·2022년 8월 10일
0

lay the ground work

목록 보기
7/18
post-thumbnail
post-custom-banner

대표적인 List 컬렉션 클래스에 속하는 클래스는 아래와 같다.

ArrayList<_E_>
LinkedList<_E_>
Vector<_E_>
Stack<_E_>


List Collection 특징

저장 순서 유지 ⭕
같은 요소의 중복 저장 ⭕



ArrayList<E>


배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있다.

하지만 배열은 크기를 변경할 수 없는 인스턴스이므로, 크기를 늘리기 위해 새로운 배열을 생성하고 기존 요소들을 옮겨야 하는 과정이 필요하다.

자동으로 수행되지만, 요소의 추가 및 삭제 작업에 걸리는 시간이 매우 길다.


ArrayList<Integer> arrList = new ArrayList<Integer>();

arrList.add(40);
arrList.add(20);

for (int i = 0; i < arrList.size(); i++) System.out.print(arrList.get(i) + " ");

arrList.remove(1);

for (int e : arrList) System.out.print(e + " ");

Collections.sort(arrList);

Iterator<Integer> iter = arrList.iterator();

while (iter.hasNext()) {
    System.out.print(iter.next() + " ");
}

arrList.set(0, 20);

for (int e : arrList) System.out.print(e + " ");

System.out.println("리스트 크기 : " + arrList.size());

// 출력 결과

// 40 20
// 40
// 40 
// 20
// 리스트 크기 : 2



LinkedList<E>


LinkedList는 ArrayList의 단점을 극복하기 위해 고안되었다.

배열은 저장된 요소가 순차적으로 저장되지만, 연결 리스트는 저장된 요소가 비 순차적으로 분포되며, 요소들 사이를 링크(link)로 연결한다.


다음 요소를 가리키는 참조만을 가진 연결 리스트를 단일 연결 리스트(singly linked list)

단일 연결 리스트는 요소의 저장과 삭제 작업이 다음 요소를 가리키는 참조만 변경하면 되므로, 빠르게 처리할 수 있다.

하지만 현재 요소에서 이전 요소로 접근하기가 어렵다.

그렇기에 이전 요소를 가리키는 참조도 가진 이중 연결 리스트(doubly linked list)를 많이 사용한다.


LinkedList 클래스 역시 List 인터페이스를 구현하므로, ArrayList 클래스와 사용할 수 있는 메서드가 거의 같다.


LinkedList<String> lnkList = new LinkedList<String>();

lnkList.add("4");
lnkList.add("3");

for (int i = 0; i < lnkList.size(); i++) {
    System.out.print(lnkList.get(i) + " ");
}

lnkList.remove(1);

for (String e : lnkList) {
    System.out.print(e + " ");
}

lnkList.set(0, "2");

for (String e : lnkList) {
    System.out.print(e + " ");
}

System.out.println("리스트의 크기 : " + lnkList.size());

// 출력 결과

// 4 3
// 4
// 2
// 리스트의 크기 : 1

✅ ArrayList와 LinkedList의 차이는 사용 방법이 아닌, 내부적으로 요소를 저장하는 방법에 있다.

profile
습관이 전부다.
post-custom-banner

0개의 댓글