220519_내일배움캠프_TIL

Today Jeeho Learned·2022년 5월 18일
0

TIL

목록 보기
26/249
  • 컬렉션 프레임 워크란?
    자바에서 다수의 데이터를 쉽고 효과적으로 처리 할 수 있는 표준화 된 방법을 제공하는 클래스의 집합을 의미한다.
    즉 데이터를 저장하는 자료구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
    이런 걸렉션 프레임워크는 자바의 인터페이스를 사용하여 구현된다.

1) List: 순서가 있는 데이터의 집합이고, 데이터의 중복을 허용한다.
ArrayList를 주로 사용

public class Main {
    public static void main(String[] args) {
        List<Integer> integerList = new ArrayList<>();
        //선언은 자료형을 적어주면서 한다.
        
        integerList.add(1);
        integerList.add(5);
        integerList.add(5);
        //add를로 원하는 숫자를 넣어준다!
    

        System.out.println(integerList);
        //[1, 5, 5] 이런 형식으로 출력된다. 

        Collections.sort(integerList);
        //list를 정렬해주는 것인데, 오름차순으로 정렬 해준다.
        
        System.out.println(integerList.size());
        //List의 크기는 size()를 붙여서 출력해준다.

        integerList.remove(4);
        //remove를 통해서 ()괄호 안에있는 인덱스를 지워준다.
        

        for (int i = 0; i < integerList.size(); i++) {
            System.out.println(integerList.get(i));
        }
        //이렇게 하면 리스트안에있는 모든 숫자가 출력되지만

        for (int current : integerList) {
            System.out.println(current);
        }
        // 더 간단하게 출력해줄수도있다.

    }
}

2) set: 순서가 없는 데이터의 집합으로 데이터 중복을 허용하지 않는다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Set<Integer> integerSet = new HashSet<>();
        integerSet.add(1);
        integerSet.add(1);
        integerSet.add(3);
        integerSet.add(2);
        integerSet.add(2);

        System.out.println(integerSet);
        // 출력하면 [1,2,3] 으로 나온다.

        System.out.println(integerSet.size());
        // set의 크기를 출력해보니 3이 나왔다. 중복되는숫자를 제외한 것이다.

        //Collections.sort(integerSet);
        // 정렬은 안된다. 순서가 유지되지않기때문

        // for(int i=0; i< integerSet.size(); i++){
        //    System.out.println(integerSet.get(i));
        // }  출력 불가능

        for (int set : integerSet) {
            System.out.println(set);
        }
        // 전과 같이 잘 출력된다.

        Set<String> stringSet = new HashSet<>();
        stringSet.add("LA");
        stringSet.add("New York");
        stringSet.add("LasVegas");
        stringSet.add("San Francisco");
        stringSet.add("Seoul");
        System.out.println(stringSet); //출력해도 제멋대로 나온다. 순서가 정해져 있지 않기 때문

        stringSet.remove("Seoul"); // 순서가 정해져 있지 않기때문에 요소의 값을 정확히 넣어서 remove해줘야한다.
        System.out.println(stringSet);

        ArrayList<String> target = new ArrayList<String>(); // String형 list를 만들어보았다.
        target.add("New York");
        target.add("LasVegas");//제거할 항목을 ArrayList에 삽입하겠습니다.
        stringSet.removeAll(target);//제거항목에 삽입된 도시들을 삭제하겠습니다.
        System.out.println(stringSet); //출력하면 New York와 Lasvegas가 없어진 형태의 stringset이 출력된다.

        System.out.println("LA가 포함되어있나요? " + stringSet.contains("LA"));
        System.out.println("LA가 포함되어있나요? " + stringSet.contains("LasVegas"));
        //LA가 HashSet에 포함되어있으면 true를, 그렇지 않으면 false를 반환합니다.

        System.out.println("현재 HashSet의 크기는 : " + stringSet.size() + "입니다.");
        //HashSet의 크기를 반환합니다.

        stringSet.clear();//HashSet의 모든 아이템들을 삭제합니다.
        System.out.println(stringSet);


    }
}

3) Map: key와 value가 한쌍으로 이루어진 데이터 집합으로 순서가 없다! 키는 중복을 허용하지 않지만, 값은 중복될수있다.

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>(); // key, value에 해당하는 타입을 선언해준다.
        map.put(1,"apple"); //key, value에 해당하는 값들을 넣어준다.
        map.put(2,"berry");
        map.put(3,"cherry");

        System.out.println(map); // {1=apple, 2=berry, 3=cherry} 이렇게 =가 붙어서 출력이 된다.

        System.out.println("1st im map" + map.get(0)); // 을 출력하면 source가 없다고 나온다! map에서 get을 사용할때는 괄호안에 key 값이 들어가야한다.
        System.out.println("1st im map" + map.get(1)); //이렇게하면 =이 빠진 apple값만이 출력된다.

        map.remove(2);
        System.out.println(map); // 마찬가지로 key값을 지워주면서{1=apple, 3=cherry} 형태로 출력된다.
        System.out.println(map.containsKey(2)); //key가 2인 부분을 지워줬기때문에 false가 출력된다.
        System.out.println(map.containsValue("cherry")); // value값이 cherry가 있는 요소가 있기 때문에 true가 출력 된다.

        map.clear();
        System.out.println(map); // {} 형태로 나오고 깔끔해진다.
    }
}
  • 자료구조

1) stack: 스택은 마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조이다.
이것을 LIFO (Last In First Out)이라고 한다. 어렸을때 비비탄총 탄창에 비비탄을 넣는데 가장 나중에 넣은 것이 가장 먼저 발사되었던 것을 기억하자!

import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>(); //stack을 생성!
        stack.push(1); // push로 값을 하나씩 넣어준다.
        stack.push(3);
        stack.push(5);
        stack.push(7);
        System.out.println(stack); // Stack [1,3,5,7]을 출력합니다 

        System.out.println(stack.peek()); // Stack의 가장 상단 값을 출력합니다.(삭제는 하지 않습니다.)
        stack.pop(); // Stack의 가장 상단 값을 제거합니다.
        System.out.println(stack);
        System.out.println(stack.size()); // Stack의 크기를 반환합니다.
        System.out.println(stack.contains(1)); // Stack에 1이라는 값이 있으면 true를, 그렇지 않으면 false를 반환합니다.
        System.out.println(stack.empty()); // STack이 비어있으면 true를, 그렇지 않으면 false를 반환합니다.
        System.out.println(stack);
    }
}


2) Queue: 큐는 처음에 저장한 데이터가 가장 먼저 꺼내게 되는 FIFO(first in first out)구조로 되어있다. 은행 창구에 줄서는 것과 인쇄 작업 대기목록을 생각하면 쉽다!

import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        queue.add(1);
        queue.add(3);
        queue.add(5);//Queue에 값 삽입합니다.
        System.out.println(queue);//Queue [1,5,3]을 출력합니다.
        System.out.println(queue.poll()); // Queue에서 객체를 꺼내서 반환합니다. 1이 출력된다.(가장 큐에 먼저 들어온 것)
        queue.add(7);
        queue.add(11);
        queue.add(9);
        System.out.println(queue);
        System.out.println(queue.peek()); //Queue에서 삭제 없이 요소를 반환합니다.
        System.out.println(queue);
    }
}

3)ArrayDeque: 실무에서 stack queue보다 많이 쓰이는 arraydeque stack,queue의 기능을 모드 포함하면서 성능도 좋다!

이런 형태이다.

import java.util.ArrayDeque;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    public static void main(String[] args) {
        ArrayDeque<Integer> arrayDeque = new ArrayDeque<>(); // ArrayDeque를 이용한 선언(제네릭스 이용)
        arrayDeque.addFirst(1);
        arrayDeque.addFirst(2);
        arrayDeque.addFirst(3);
        arrayDeque.addFirst(4); // arrayDeque의 앞에 값을 삽입
        System.out.println(arrayDeque); //[4,3,2,1]로 출력된다.

        arrayDeque.addLast(0); // arrayDeque의 끝에 값을 삽입
        System.out.println(arrayDeque); // 뒤로 넣어주기 때문에 [4,3,2,1,0]이 출력된다.

        arrayDeque.offerFirst(10); // addFirst와 비슷하지만 큐의 크기 문제가 생길 때, offerFirst는 false를,
        // addFrist는 exception을 반환합니다.
        System.out.println(arrayDeque);

        arrayDeque.offerLast(-1); // arrayDeque의 끝에 값을 삽입
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 7


        System.out.println(arrayDeque.removeFirst()); // 첫번째 값을 제거하면서 그 값을 리턴
        System.out.println(arrayDeque.removeLast()); // 마지막 값을 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 5

        System.out.println(arrayDeque.pollFirst()); // 첫번째 값을 반환 및 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 4

        System.out.println(arrayDeque.pollLast()); // 마지막 값을 반환 및 제거하면서 그 값을 리턴
        System.out.println(arrayDeque);
        System.out.println(arrayDeque.size()); // 3

        System.out.println(arrayDeque.peekFirst()); // 첫번째 값을 반환, 제거하지 않음
        System.out.println(arrayDeque.peekLast()); // 마지막 값을 반환, 제거하지 않음
        System.out.println(arrayDeque.size()); // 3
    }
}
profile
기록해야 (살아)남는다 !

0개의 댓글