List 컬렉션 클래스

윤재열·2022년 1월 11일
0

Java

목록 보기
22/71

컬렉션 클래스

List 컬렉션 클래스를 구현한 모든 List컬렉션 클래스는 다음과 같은 특성을 가집니다.
1. 요소의 저장 순서가 유지됩니다.
2. 같은 요소의 중복 저장을 허용합니다.

  • 대표적인 List 컬렉션 클래스에 속하는 클래스는 다음과 같습니다.
  1. ArrayList
  2. LinkedList
  3. Vector
  4. Stack

1. ArrayList클래스

ArrayList 클래스는 가장 많이 사용되는 컬렉션 클래스 중 하나입니다.
JDK 1.2부터 제공된 ArrayList 클래스는 내부적으로 배열을 이용하여 요소를 저장합니다.

-크기를 변경할 수 없는 인스턴스이므로, 크기를 늘리기 위해서는 새로운 배열을 생성하고 기존의 요소들을 옮겨야 하는 복잡한 과정을 거쳐야 합니다.
물론 이 과정은 자동으로 수행되지만, 요소의 추가 및 삭제 작업에 걸리는 시간이 매우 길어지는 단점을 가지게 됩니다.

  • 다음 예제는 여러 ArrayList 메소드를 이용하여 리스트를 생성하고 조작하는 예제입니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

public class Collection2 {
    public static void main(String[] args) {
        ArrayList<Integer> arrList = new ArrayList<Integer>();

        //add()메서드를 이요한 요소의 저장
        arrList.add(40);;
        arrList.add(20);
        arrList.add(30);
        arrList.add(10);

        //for문과 get() 메서드를 이용한 요소의 출력
        for(int i =0; i< arrList.size(); i++){
            System.out.print(arrList.get(i)+ ",");
        }
        System.out.println();
        //remove()메서드를 이용한 요소의 제거
        arrList.remove(1);

        //향상된 for문과 get() 메서드를 이용한 요소의 출력
        for(int e : arrList){
            System.out.print(e + ",");
        }
        System.out.println();
                                        
        //Collections.sort()메서드를 이요한 요소의 출력
        Collections.sort(arrList);
                                        
        //iterator() 메서드와 get()메서드를 이용한 요소의 출력
        Iterator<Integer> iter = arrList.iterator();
        while(iter.hasNext()){
            System.out.print(iter.next() +",");
        }
        System.out.println();
  
        // set() 메소드를 이용한 요소의 변경
        arrList.set(0, 20);

        for (int e : arrList) {
            System.out.print(e + " ");
        }
        System.out.println();
  
        // size() 메소드를 이용한 요소의 총 개수
        System.out.println("리스트의 크기 : " + arrList.size());
         }
}

2. LinkedList클래스

LinkedList 클래스는 ArrayList 클래스가 배열을 이용하여 요소를 저장함으로써 발생하는 단점을 극복하기 위해 고안되었습니다.

  • JDK 1.2부터 제공된 LinkedList 클래스는 내부적으로 연결 리스트(linked list)를 이용하여 요소를 저장합니다.

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

  • 다음 요소를 가리키는 참조만을 가지는 연결 리스트를 단일 연결 리스트(singly linked list)라고 합니다.

    • 다음 예제는 여러LinkedList메서드를 이용하여 리스트를 생성하고 조작하는 예제입니다.
import java.util.LinkedList;

public class Collection3 {
    public static void main(String[] args) {
        LinkedList<String> lnkList = new LinkedList<String>();

        //add()메서드를 이용한 요소의 저장
        lnkList.add("넷");
        lnkList.add("둘");
        lnkList.add("셋");
        lnkList.add("하나");

        // for 문과 get() 메소드를 이용한 요소의 출력
        for (int i = 0; i < lnkList.size(); i++) {
            System.out.print(lnkList.get(i) + " ");
        }
        System.out.println();
        // remove() 메소드를 이용한 요소의 제거
        lnkList.remove(1);

        // Enhanced for 문과 get() 메소드를 이용한 요소의 출력
        for (String e : lnkList) {
            System.out.print(e + " ");
        }
        System.out.println();
        // set() 메소드를 이용한 요소의 변경
        lnkList.set(2, "둘");

        for (String e : lnkList) {
            System.out.print(e + " ");
        }
        System.out.println();
        // size() 메소드를 이용한 요소의 총 개수
        System.out.println("리스트의 크기 : " + lnkList.size());
    }
}
  • 위의 에제를 살펴보면 앞선 예제와 연결 리스트를 생성하는 한 줄의 코드만이 다른 것을 확인할 수 있습니다.
  • 이처럼 ArrayList와 LinkedList의 차이는 사용 방법이 아닌, 내부적으로 요소를 저장하는 방법에 있습니다.
                                         

3. Vector클래스

Vector 클래스는 JDK 1.0부터 사용해 온 ArrayList 클래스와 같은 동작을 수행하는 클래스입니다.

-현재의 Vector 클래스는 ArrayList 클래스와 마찬가지로 List 인터페이스를 상속받습니다.
따라서 Vector 클래스에서 사용할 수 있는 메소드는 ArrayList 클래스에서 사용할 수 있는 메소드와 거의 같습니다.

-하지만 현재에는 기존 코드와의 호환성을 위해서만 남아있으므로, Vector 클래스보다는 ArrayList 클래스를 사용하는 것이 좋습니다.

List인터페이스 메서드

List 인터페이스는 Collection 인터페이스를 상속받으므로, Collection 인터페이스에서 정의한 메소드도 모두 사용할 수 있습니다.
List 인터페이스에서 제공하는 주요 메소드는 다음과 같습니다.

profile
블로그 이전합니다! https://jyyoun1022.tistory.com/

0개의 댓글