ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] List 컬렉션 클래스
    프로그래밍/JAVA 2022. 8. 9. 22:08
    728x90

     

     

    List 컬렉션 클래스는 순서가 있는 데이터들의 집합으로 데이터의 중복을 허용하는 특징을 가지고 있다.

     

    대표적인 List 컬렉션 클래스는 Vector, ArrayList, LinkedList, Stack, Queue가 있고 하나씩 알아보자.

     


    Vector <E> 클래스

    vector 클래스는 자바 1.0부터 존재하는 레거시 클래스로 배열과 동일하게 정수 인덱스를 이용하여 액세스 할 수 있고 동적인 길이로 여러 데이터형을 저장하기 위해 사용된다. 동기화가 되어 있으며 한번에 하나의 스레드만 벡터의 메소드를 호출 할 수 있다.

     

    Vector<타입> 참조변수 = new Vector<>(요소의 개수);
    
    addElement() : 요소를 추가
    size() : 요소의 개수를 반환
    capacity() : 현재 벡터에 저장 가능한 크기를 반환
    get() : 인덱스로 저장된 값을 찾아 반환
    removeAllElement() :  저장된 모든 요소를 삭제
    set() : 인덱스로 저장된 값을 변경(설정)
    참조변수.set(인덱스, 값);

     

     


    ArrayList <E> 클래스

    JDK 1.2부터 제공되어 배열과 동일하게 정수 인덱스를 이용하여 엑세스할 수 있다. 또한 동적인 길이로 여러 데이터형을 저장하기 위해 사용한다. 요소의 추가 및 삭제에 걸리는 시간이 소요된다는 단점이 존재한다. 비동기식을 사용하며 멀티 스레드를 지원한다.

     

    ArrayList<타입> 참조변수 = new ArrayList();
    
    add() : 요소를 추가
    size() : 요소의 개수 반환
    remove() : 인덱스를 이용하여 요소를 삭제
    set() : 인덱스로 저장된 값을 변경(설정)
    public static void main(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(80); // 요소 추가
        arrayList.add(100);
        arrayList.add(65);
        arrayList.add(90);
        arrayList.add(55);
        System.out.println(arrayList);  // [80, 100, 65, 90, 55]
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.print(arrayList.get(i) + " ");  // 80 100 65 90 55
        }
        System.out.println("");
        arrayList.remove(2); // 인덱스
        System.out.println(arrayList); // [80, 100, 90, 55]
        arrayList.set(0,60); // 해당 인덱스의 값 바꾸기
        System.out.println(arrayList); // [60, 100, 90, 55]
    
        // 탐색
        Iterator<Integer> iterator = arrayList.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next() + " ");  // 60 100 90 55
        }
        System.out.println("");
    }

     


    LinkedList <E> 클래스

    JDK 1.2부터 제공되어 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식이다. 배열과 같이 순차적으로 저장하는 ArrayList 에 비해 데이터의 추가나 삭제가 빠른 장점을 가지고있으나 인덱스가 없기 때문에 특정요소에 접근이 느리다. 즉, 탐색 속도가 느린 단점이 존재한다.

     

    탐색 또는 정렬을 자주하는 경우에는 ArrayList을 사용하고, 데이터의 추가/삭제가 많은 경우에는 LinkedList를 사용하는 것이 좋다.

     

    public static void main(String[] args) {
            LinkedList<String> linkedList = new LinkedList<>();
            linkedList.add("홍길동");
            linkedList.add("이순신");
            linkedList.add("임꺽정");
            linkedList.add("유관순");
            System.out.println(linkedList);       // [홍길동, 이순신, 임꺽정, 유관순]
            System.out.println(linkedList.peek());// 홍길동 : 첫번째 데이터 반환
            System.out.println(linkedList.poll());// 홍길동 : 첫번째 데이터 반환 및 삭제
            System.out.println(linkedList); // [이순신, 임꺽정, 유관순]
            linkedList.remove("임꺽정");     // 입력값 삭제
            System.out.println(linkedList); // [이순신, 유관순]
    }

     


    Stack <E> 클래스

    한쪽 끝에서만 자료를 넣고 뺄 수 있는 형식의 자료구조로 흔히 LIFO(Last input First out)라고한다. 

     

    Stack<타입> 참조변수 = new Stack<>();
    
    push() : 요소를 저장
    peek() : 마지막 데이터(첫번째 뽑힐)를 반환
    pop() : 마지막(첫번째 뽑힐) 데이터를 반환 하고 삭제
    search() : 데이터의 순서를 반환
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(40); // 요소 추가
        stack.push(100);
        stack.push(80);
        stack.push(50);
        stack.push(20);
        System.out.println(stack); // [40, 100, 80, 50, 20] : 순서 있음
        System.out.println(stack.peek()); // 20 : 마지막 데이터 반환
        System.out.println(stack); // [40, 100, 80, 50, 20]
        System.out.println(stack.pop()); // 20 : 마지막 데이터 반환 및 삭제
        System.out.println(stack); // [40, 100, 80, 50]
        System.out.println(stack.search(40)); // 4 : 뽑힐 순서[ 4, 3, 2, 1]
        stack.clear(); // 데이터 모두 삭제
        System.out.println(stack); // []
    }

     


    Queue <E> 클래스

    큐는 한쪽 끝을 프론트로 정하여 삭제 연산만 수행하고 다른 한쪽 큐를 리어로 정하여 삽입 연산만 수행한다. FIFO(First in First out)를 의미하고 예로 운영체제의 스케줄러, 푸시 메세지에서 사용된다. 

     

    Queue<타입> 참조변수 = new LinkedList<>();
    
    offer() : 요소 추가
    peek() :  첫번째 데이터를 반환
    poll() : 첫번째 데이터를 반환하고 삭제
    remove() : 값 제거
    clear() : 저장된 모든 요소를 삭제
    public static void main(String[] args) {
            Queue<Integer> queue = new LinkedList<>();
            queue.offer(10);
            queue.offer(50);
            queue.offer(80);
            queue.offer(20);
            queue.offer(70);
            System.out.println(queue); // [10, 50, 80, 20, 70], 순서가 있음
            System.out.println(queue.peek()); // 10, 첫번째 데이터를 반환
            queue.poll();   // 첫번째 데이터 삭제
            System.out.println(queue); // [50, 80, 20, 70]
            queue.remove(); // 첫번째 데이터 삭제
            System.out.println(queue);  // [80, 20, 70]
    
            queue.clear(); // 모든 데이터 삭제
            System.out.println(queue);  // []
    }

     

     

     

     

     

    728x90

    댓글

Designed by Tistory.