반응형
개념정리
컬렉션 - list, set, map, stack, queue
1. 컬렉션 인터페이스
- List : 순서가 있는 데이터의 집합이며 데이터의 중복을 허용. → ArrayList, LinkedList, Stack 등
- Set : 순서를 유지하지 않는 데이터의 집합이며 데이터의 중복을 허용. → HashSet, TreeSet 등
- Map : 키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며 키는 중복을 허용되지 않고 값은 중복을 허용 → HashMap, TreeMap 등
- Stack : 마지막에 넣은 데이터를 먼저 꺼내는 자료구조. LIFO(Last In First Out) → Stack, ArrayDeque 등
- Queue : 먼저 넣은 데이터를 먼저 꺼내는 자료구조. FIFO(First In First Out) → Queue, ArrayDeque 등
2. List
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(10);
list.add(1);
list.add(5);
list.add(4);
list.add(11);
list.add(10); // ArrayList에 값 한개씩 입력
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(4); // 인덱스를 활용하여 해당하는 값 제거(4번째 자리)
System.out.println(list); // [1,4,5,10]
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); // get을 이용하여 값 1개씩 출력
}
for (int current : list) {
System.out.println(current); // 위 반복문과 똑같이 출력
}
}
}
2. Set
- 순서를 유지하지 않는 데이터의 집합이며 데이터의 중복을 허용하지 않음
- HashSet은 Set 인터페이스를 구현한 대표적인 컬렉션
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> integerSet = new HashSet<>(); // Collection의 자료형에는 primitive 타입은 올 수 없습니다. primitive 타입에 해당하는 class 가 존재하니 그것을 사용하세요.
integerSet.add(1);
integerSet.add(1);
integerSet.add(3);
integerSet.add(2);
integerSet.add(9);
integerSet.add(8);// 하나씩 값을 삽입합니다.
System.out.println(integerSet); // [1, 2, 3, 8, 9]
// 출력을 해보면 순서가 지켜지지 않고 중복 없음
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"); //Seoul을 HashSet에서 제거해보겠습니다.
System.out.println(stringSet);
ArrayList<String> target = new ArrayList<String>();
target.add("New York");
target.add("LasVegas");//제거할 항목을 ArrayList에 삽입하겠습니다.
stringSet.removeAll(target);//제거항목에 삽입된 도시들을 삭제하겠습니다.
System.out.println(stringSet);
System.out.println("LA가 포함되어있나요? " + stringSet.contains("LA")); // contains(object) boolean으로 리턴
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
- HashMap은 키(key)와 값(value)을 하나의 데이터로 저장하는 특징을 가짐. 이를 통하여 해싱(hashing)을 가능하게 하여 데이터를 검색하는데 뛰어난 성능을 보임
- 해싱(hashing)이란 키(Key) 값을 해시 함수라는 수식에 대입시켜 계산한 후 나온 결과를 주소로 사용하여 바로 값(Value)에 접근하게 할 수 하는 방법
- 해시함수 : 키(Key) 값을 값(Value)이 저장되는 주소 값으로 바꾸기 위한 수식
- 추가 hash에 대한 내용 ==> https://dev-kani.tistory.com/2
public class Main {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>(); // <key,value>
map.put(1, "apple");
map.put(2, "berry");
map.put(3, "cherry");
System.out.println(map);
System.out.println("1st in map: " + map.get(1)); //get으로 불러오기
map.remove(2);
System.out.println(map);
System.out.println(map.containsKey(2));
System.out.println(map.containsValue("cherry"));
map.clear();
System.out.println(map);
}
}
4. Stack
- 마지막에 저장한 데이터를 가장 먼저 꺼내는 자료구조 -> LIFO(Last In First Out).
- 스택의 예 : 웹브라우저의 앞페이지 이동 뒤페이지 이동 / 그릇 쌓기
- 먼저 삽입된 값인 17이 가장 아래로, 이후 삽입되는 값은 그 위에 쌓이기 시작. 이후, pop()을 통해 값을 반환할 때도 마지막에 삽입된 값인 45가 가장 먼저 반환되죠!
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(3);
stack.push(5);
stack.push(7);
System.out.println(stack); // Stack을 출력합니다
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);
}
}
5. Queue
- 처음에 저장한 데이터를 가장 먼저 꺼내는 자료구조 -> FIFO(First In First Out)
- 큐의 예 : 은행 창구 줄서기 / 인쇄작업 대기목록
- 큐는 양 쪽 끝의 통로가 뚫려있다고 생각하면 됨. 가장 먼저 들어온 Data가 반환이 될때도 가장 먼저 반환
- 큐는 우선순위 큐, 원형 우선순위 큐, 원형 큐 등 다양하게 존재
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, 3, 5]
System.out.println(queue.poll()); // Queue에서 객체를 꺼내서 반환 : 1
queue.add(7);
queue.add(11);
queue.add(9);
System.out.println(queue); // [3, 5, 7, 11, 9]
System.out.println(queue.peek()); //Queue에서 삭제 없이 요소를 반환 : 3
System.out.println(queue); // [3, 5, 7, 11, 9]
}
}
반응형
'개발 하나둘셋 > Java & Spring' 카테고리의 다른 글
DI, IoC, Bean (0) | 2021.11.21 |
---|---|
Spring Boot의 Model, Controller, Service, Repository (0) | 2021.11.16 |
JPA(Java Persistence API) 이해하기 (0) | 2021.11.16 |
자바(Java) 이해하기 (자바의 특징, JAM) (0) | 2021.11.14 |
[JAVA] 날짜 표시하기 (0) | 2021.11.09 |