본문 바로가기

Java 문법

컬렉션

컬렉션 프레임워크란?

- 다수의 데이터를 다루기 위한 자료구조를 표현하고 사용하는 클래스의 집합

- 컬렉션 프레임워크의 모든 클래스는 Collection 인터페이스를 구현하는 클래스 또는 인터페이스

 

 

1. List

- 순서가 있는 데이터의 집합, 데이터 중복 허용

ArrayList, LinkedList, Stack 등등

 

2. Set

- 순서를 유지하지 않는 데이터의 집합, 데이터의 중복 허용 X

HashSet, TreeSet 등등

 

3. Map

- 키(key)와 값(value)의 쌍으로 이뤄진 데이터의 집합

- 순서는 유지되지 않으며 키는 중복 허용 X, 값은 중복 허용

HashMap, TreeMap 등등

 

4. Stack

- 마지막에 넣은 데이터를 먼저 꺼내는 자료구조, LIFO(Last In First Out)

Stack, ArrayDeque 등등

 

5. Queue

- 먼저 넣은 데이터를 먼저 꺼내는 자료구조, FIFO(First In First Out)

Queue, ArrayDeque 등등

 

 

 

List

- 순서가 있는 나열된 데이터를 표현

- ArrayList는 배열을 이용하여 데이터를 저장하는 List의 인터페이스

public static void main(String[] args) {
        List<Integer> list = new ArrayList();

        //list 삽입
        list.add(1);
        list.add(3);
        list.add(2);
        System.out.println(list); //[1, 3, 2]

        //list 정렬
        Collections.sort(list);
        System.out.println(list); //[1, 2, 3]

        //list 크기
        System.out.println(list.size()); //3

        //해당 index 삭제
        list.remove(2); //[1, 2]
        System.out.println(list);

        //반복문을 통해 list 값 하나하나 출력
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        for (int i : list) {
            System.out.println(i);
        }
    }

 

 

 

Set

- 순서를 유지하지 않는 데이터의 집합

- 데이터의 중복 허용 X

- HashSet은 Set 인터페이스를 구현한 대표적 컬렉션

public static void main(String[] args) {

        /*
         *  Collections 의 자료형에는 primitive 타입 올 수 없음
         *  primitive 타입에 해당하는 class 
         */
        
        Set<Integer> hashSet = new HashSet<>();
        //set 삽입
        hashSet.add(1);
        hashSet.add(3);
        hashSet.add(2);
        hashSet.add(4);
        System.out.println(hashSet); //순서 지켜지지 않고 출력

        Set<String> stringSet = new HashSet<>();
        stringSet.add("Korea");
        stringSet.add("USA");
        stringSet.add("Japan");
        stringSet.add("China");
        System.out.println(stringSet); //순서 지켜지지 않고 출력

        //stringSet 에서 China 값 제거
        stringSet.remove("China");
        System.out.println(stringSet); //China 제외 나머지 데이터 출력

        //stringSet 내의 target 데이터들을 모두 제거
        ArrayList<String> target = new ArrayList<>();
        target.add("USA");
        target.add("Japan");
        stringSet.removeAll(target);
        System.out.println(stringSet); //Korea 만 남고 모두 제거됨

        //stringSet 에 존재 여부 확인
        System.out.println(stringSet.contains("Korea")); //true
        System.out.println(stringSet.contains("USA")); //false

        //stringSet 의 크기
        System.out.println(stringSet.size()); //1

        //stringSet 의 모든 데이터 삭제
        stringSet.clear();
        System.out.println(stringSet); //[]
    }

 

 

 

Map

- HashMap은 키(key)와 값(value)을 하나의 데이터로 저장하는 특징 존재

- 해싱(hashing)이 가능하여 데이터를 검색하는데 뛰어난 성능

public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "Korea");
        map.put(2, "USA");
        map.put(3, "Japan");

        System.out.println(map);

        System.out.println(map.get(1)); //key=1에 해당하는 Korea 출력

        map.remove(2); //key=2에 해당하는 USA 삭제
        System.out.println(map);

        //key=3이 존재하는지 확인
        System.out.println(map.containsKey(3)); //true
        
        //Korea 값을 갖는 value가 존재하는지 확인
        System.out.println(map.containsValue("Korea")); //true
        System.out.println(map.containsValue("USA")); //false

        //모든 데이터 삭제
        map.clear();
        System.out.println(map); //{}
    }

 

 

 

Stack

- 마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조, LIFO(Last In First Out)

public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        //stack 에 순서대로 데이터 삽입
        stack.push(1);
        stack.push(3);
        stack.push(5);
        stack.push(7);
        System.out.println(stack); //[1, 3, 5, 7]

        //stack 의 가장 상단 값(최근에 삽입된 값)을 반환, 삭제 X
        System.out.println(stack.peek()); //7

        //stack 의 가장 상단 값(최근에 삽입된 값)을 반환 및 삭제
        System.out.println(stack.pop()); //7

        //stack 의 크기
        System.out.println(stack.size()); //3

        //stack 내의 데이터 존재 여부 확인
        System.out.println(stack.contains(1)); //true

        //stack 비어있는지 확인
        System.out.println(stack.empty()); //false
    }

 

 

 

Queue

- 처음에 저장한 데이터를 가장 먼저 꺼내게 자료구조, FIFO(First In First Out)

- 우선순위 큐, 원형 우선순위 큐, 원형 큐 등 다양한 큐 존재

public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();

        //queue 에 데이터 삽입
        queue.add(1);
        queue.add(3);
        queue.add(5);

        System.out.println(queue); //[1, 3, 5]

        //가장 앞의 데이터를 반환
        System.out.println(queue.peek()); //1
        System.out.println(queue.size()); //3

        //가장 먼저 들어왔던 데이터를 삭제 및 반환
        System.out.println(queue.poll()); //1
        System.out.println(queue.size()); //2
    }

 

 

 

ArrayDeque

- 위의 Queue는 한쪽에서만 값이 삽입되고 다른 한쪽에서는 값을 반환하는 자료구조, FIFO(FIrst In First Out)

- deque는 양 끝에서 삽입과 반환 모두 가능

public static void main(String[] args) {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>();

        //arrayDeque 의 앞에 데이터 삽입
        arrayDeque.addFirst(1);
        arrayDeque.addFirst(2);
        arrayDeque.addFirst(3);
        System.out.println(arrayDeque); //[3, 2, 1]

        //arrayDeque 의 끝에 데이터 삽입
        arrayDeque.addLast(0);
        System.out.println(arrayDeque); //[3, 2, 1, 0]

        //addFirst 와 비슷하지만, 큐의 크기에 문제 발생 시
        //addFirst 는 exception, offerFirst 는 false 반환
        arrayDeque.offerFirst(4);
        System.out.println(arrayDeque); //[4, 3, 2, 1, 0]
        System.out.println(arrayDeque.size()); //5

        //arrayDeque 의 첫번째 값 반환 및 삭제
        System.out.println(arrayDeque.removeFirst()); //4
        System.out.println(arrayDeque.pollFirst()); //3

        //arrayDeque 의 마지막 값 반환 및 삭제
        System.out.println(arrayDeque.removeLast()); //0
        System.out.println(arrayDeque.pollLast()); //1
        
        System.out.println(arrayDeque); //[2]

        //arrayDeque 의 첫번째 값 반환
        System.out.println(arrayDeque.peekFirst()); //2
        
        //arrayDeque 의 마지막 값 반환
        System.out.println(arrayDeque.peekLast()); //2
    }

 

'Java 문법' 카테고리의 다른 글

람다, 스트림  (0) 2021.08.15