본문 바로가기
Java

자바 컬렉션 프레임워크(List, Set, Map)

by 오늘이 내가 된다. 2022. 1. 10.

컬렉션(collection): 여러 객체를 모아 놓은 것을 의미

프레임워크(framwork) : 표준화, 정형화된 체계적인 프로그래밍 방식

 


 

컬렉션 프레임워크

데이터 군을 저장하는 클래스들을 표준화한 설계

다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스

 

인터페이스 특징
list 순서가 있는 데이터 집합, 데이터의 중복을 허용
구현클래스: ArrayList, LinkedList, Stack, Vector 등
set 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다.
구현클래스 : HashSet, TreeSet 등
map 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합
순서는 유지되지 않는다.
키는 중복을 허용하지 않고, 값은 중복허용
구현클래스 : HashMap, TreeMap, Hashtable, Properties 등

매우 중요한 표 입니다.

구분 list map set
순서 존재 미존재 미존재
중복 허용 key: 비허용(아이디)
value: 허용(패스워드)
비허용
crud add, remove put, get put, remove add, remove
클래스(대표적인) ArrayList, LinkedList HashMap, TreeMap HashSet, TreeSet

 

 

컬렉션 프레임워크의 동기화(sysnchronization)

 

 

vector와 ArrayList (List)

list의 구현클래스

vector

ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일

- List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.

- 데이터의 저장공간으로 배열을 사용한다.(배열기반)

- Vector는 자체적으로 동기화처리가 되어 있으나 ArrayList는 그렇지 않다.

 

 

ArrayList (배열의 단점)

▶단점 1 : 크기를 변경할 수 없다.

- 크기를 변경해야 하는 경우 새로운 배열을 생성하고 데이터를 복사해야 한다.(비용이 큰 작업)

- 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리 낭비가 심해진다.

 

▶ 단점 2 : 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다.

- 그러나, 순차적인 데이터 추가(마지막에 추가)와 순차적으로 데이터를 삭제하는 것(마지막에서부터 삭제)은 빠르다.

 

 

ArrayList CRUD 알아보기

import java.util.ArrayList;

public class ArrayListTest {

    public static void main(String[] args) {
      ArrayListTest alt = new ArrayListTest();
      alt.test1();
    }

    public void test1() {
        System.out.println("ArrayList test!");
        
        // ArrayList 인스턴스 생성
        ArrayList list = new ArrayList();
        
        // create (생성)
        list.add(new Integer(10)); // 다형성 1코드
        list.add(new Integer(2));
        list.add(new Integer(5));
        // list.add(new String("four"));
        int size = list.size();
        System.out.println("size : " + size);

        // 조회
        Integer num = (Integer) list.get(0); // 다형성 2코드 (Object의 객체를 Integer 객체로)
        int number = num.intValue(); // Integer클래스에서 intValue() 메소드 사용
        System.out.println("number: " + number);

        // 전체조회
        this.print(list);
        System.out.println();
        
        // 수정
        list.set(0, new Integer(1));
        this.print(list); // the value is 10 -> the value is 1
        System.out.println();

        // 삭제
        Integer delNumber = (Integer) list.remove(2); // 해당 index의 값 삭제
        this.print(list);
        System.out.println();
        System.out.println("delete Object number = " + delNumber.intValue());

    }

    public void print(ArrayList list) {
        for(int i=0; i<list.size(); i++) { // ArrayList는 가변 값을 가지므로 list.size를 통해 가변값을 할당
        Integer temp = (Integer)list.get(i);
        System.out.printf("the value is %d %n", temp.intValue());
    }
    }

}
더보기
더보기
더보기
해당 코드 콘솔 출력
C: CREATE  (생성)
R: READ     (조회)
U: UPDATE (갱신)
D: DELETE  (삭제)

 

 

스택과 큐

▶ 스택(Stack) : LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다. (후입선출)

▶ 큐(Queue) : FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다. (선입선출)

- 수식계산, 수식괄호검사, undo/redo, 뒤로/앞으로(웹브라우져) - 최근 사용문서, 인쇄작업대기목록, 버퍼(buffer)

 

 

 

컬렉션 클래스 정리

 

컬렉션 특징
ArrayList 배열기반, 데이터의 추가와 삭제에 불리, 순차적 추가삭제는 제일 빠름.
임의의 요소에 대한 접근성이 뛰어남
LinkedList 연결기반. 데이터의 추가와 삭제에 유리.
임의의 요소에 대한 접근성이 좋지 않다.
HashMap 배열과 연결이 결합된 형태, 추가, 삭제, 검색, 접근성이 모두 뛰어남.
검색에는 최고성능을 보인다.
TreeMap 연결기반. 정렬과 검색(특히 범위검색)에 적합.
검색성능은 HashMap보다 떨어짐.
Stack Vector를 상속받아 구현
Queue LinkedList가 Queue인터페이스를 구현
Properties HashTable을 상송받아 구현
HashSet HashMap을 이용해서 구현
TreeSet TreeMap을 이용해서 구현
LinkedHashMap
LinkedHashSet
HashMap과 HashSet에 저장순서유지기능을 추가

 

댓글