컬렉션(Collection)

소희·2022년 8월 9일
1

개발 단어장

목록 보기
2/2
post-thumbnail

컬렉션 인터페이스

  • List : 순서가 있는 데이터의 집합이며 데이터의 중복을 허용 👉 ArrayList, LinkedList, Stack
  • Set : 순서를 유지하지 않는 데이터의 집합이며 데이터의 중복을 허용 👉 HashSet, TreeSet
  • Map : 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며 키는 중복을 허용되지 않고 값은 중복을 허용 👉 HashMap, TreeMap
  • Stack : 마지막에 넣은 데이터를 먼저 꺼내는 자료구조. LIFO(Last In First Out) 👉 Stack, ArrayDeque
  • Queue : 먼저 넣은 데이터를 먼저 꺼내는 자료구조. LIFO(Last In First Out) 👉 Queue, ArrayDeque

List

List<Integer> list = new ArrayList<Integer>(10);
list.add(1); 👈 ArrayList에 값 한개씩 입력
list.add(5);
list.add(4);
list.add(11);
list.add(10);
System.out.println(list); 👈 [1, 5, 4, 11, 10]
        
Collections.sort(list); 👈 list 정렬
System.out.println(list); 👈 [1, 4, 5, 10, 11]
        
System.out.println(list.size()); 👈 ArrayList의 크기 출력 => 5
        
list.remove(2); 👈 인덱스를 활용하여 해당하는 값 제거(0부터 시작)
System.out.println(list); 👈 [1, 4, 10, 11]
        
for(int i=0; i<list.size(); i++) {
	System.out.println(list.get(i)); 👈 get을 이용하여 값 1개씩 출력
}
for(int current : list) {
	System.out.println(current); 👈 위 반복문과 똑같이 출력
}

Set

  • 순서를 유지하지 않는 데이터의 집합이며 데이터의 중복을 허용하지 않음
  • HashSet은 Set 인터페이스를 구현한 대표적인 컬렉션
Set<Integer> integerSet = new HashSet<>(); 👈 Collection의 자료형에는 primitive 타입은 올 수 없다.
integerSet.add(1); 👈 하나씩 값을 삽입한다.
integerSet.add(1);
integerSet.add(5);
integerSet.add(4);
integerSet.add(11);
integerSet.add(10);
System.out.println(integerSet); 👈 [1, 4, 5, 10, 11]
👆 출력을 해보면 순서가 지켜지지 않고 중복 없음

Set<String> stringSet = new HashSet<>();
stringSet.add("LA"); 
stringSet.add("New York");
stringSet.add("LasVagas");
stringSet.add("San Francisco");
stringSet.add("Seoul");
System.out.println(stringSet); 👈 [San Francisco, New York, LA, Seoul, LasVagas]

stringSet.remove("Seoul");
System.out.println(stringSet); 👈 [San Francisco, New York, LA, LasVagas]
        
ArrayList<String> target = new ArrayList<String>();
target.add("New York");
target.add("LasVagas");
stringSet.removeAll(target);
System.out.println(stringSet); 👈 [San Francisco, LA]
        
👇 contains(object) boolean으로 리턴
System.out.println("LA가 포함되어 있나요? " + stringSet.contains("LA")); 👈 LA가 포함되어 있나요? true
System.out.println("LA가 포함되어 있나요? " + stringSet.contains("LasVegas")); 👈 LA가 포함되어 있나요? false
        
System.out.println("현재 HashSet의 크기는 : " + stringSet.size() + "입니다"); 👈 현재 HashSet의 크기는 : 2입니다
        
stringSet.clear(); 👈 HashSet의 모든 아이템들을 삭제
System.out.println(stringSet); 👈 []

Map

  • HashMap은 키(key)와 값(value)을 하나의 데이터로 저장하는 특징을 가짐. 이를 통하여 해싱(hashing)을 가능하게 하여 데이터를 검색하는데 뛰어난 성능을 보임
  • 해싱(hashing)이란 키(key) 값을 해시 함수라는 수식에 대입시켜 계산한 후 나온 결과를 주소로 사용하여 바로 값(value)에 접근하게 할 수 있는 방법
  • 해시함수 : 키(key) 값을 값(value)이 저장되는 주소 값으로 바꾸기 위한 수식
Map<Integer, String> map = new HashMap<>();
map.put(1, "apple"); 
map.put(2, "berry");
map.put(3, "cherry");
System.out.println(map); 👈 {1=apple, 2=berry, 3=cherry}
        
System.out.println("1st in map : " + map.get(1)); 👈 1st in map : apple
        
map.remove(2);
System.out.println(map); 👈 {1=apple, 3=cherry}
System.out.println(map.containsKey(2)); 👈 false
System.out.println(map.containsValue("cherry")); 👈 true
        
map.clear();
System.out.println(map); 👈 {}

stack

  • 마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조 👉 LIFO(Last In First Out)
  • 스택의 예 : 웹브라우저의 앞페이지 이동 뒤페이지 이동 / 그릇 쌓기
  • 먼저 삽입된 값인 17이 가장 아래로, 이후 삽입되는 값은 그 위에 쌓이기 시작. 이후, pop()을 통해 값을 반환할 때도 마지막에 삽입된 값인 45가 가장 먼저 반환된다.
Stack<Integer> stack = new Stack<>();
stack.push(1); 
stack.push(3); 
stack.push(5); 
stack.push(7); 
System.out.println(stack); 👈 [1, 3, 5, 7]

👇 stack의 가장 상단 값을 출력(삭제는 하지 않는다)
System.out.println(stack.peek()); 👈 7
stack.pop(); 👈 가장 상단 값 제거
System.out.println(stack); 👈 [1, 3, 5]

System.out.println(stack.size()); 👈 3

👇 Stack에 1이라는 값이 있으면 true를, 그렇지 않으면 false를 반환
System.out.println(stack.contains(1)); 👈 true 
System.out.println(stack.empty()); 👈 false
👆 stack이 비어있으면 true를, 그렇지 않으면 false를 반환

Queue

  • 처음에 저장한 데이터를 가장 먼저 꺼내는 자료구조 👉 LIFO(Last In First Out)
  • 큐의 예 : 은행 창구 줄서기 / 인쇄작업 대기목록
  • 큐는 양 쪽 끝의 통로가 뚫려있다고 생각하면 됨. 가장 먼저 들어온 Data가 반환이 될 때도 가장 먼저 반환
  • 큐는 우선순위 큐, 원형 우선순위 큐, 원형 큐 등 다양하게 존재
Queue<Integer> queue = new LinkedList<>();
queue.add(1); 
queue.add(3); 
queue.add(5); 
System.out.println(queue); 👈 [1, 3, 5]

👇 queue에서 객체를 꺼내서 반환
System.out.println(queue.poll()); 👈 1
queue.add(7);
queue.add(11);
queue.add(9);
System.out.println(queue); 👈 [3, 5, 7, 11, 9]

👇 queue에서 삭제 없이 요소를 반환
System.out.println(queue.peek()); 👈 3
System.out.println(queue); 👈 [3, 5, 7, 11, 9]

출처

https://yuricoding.tistory.com/60

0개의 댓글