배운 내용 🏃
list 종류에 이어서 배웠다 ~
List ⛓ : 순서가 있는 데이터의 집합 (데이터 중복 허용) - 배열과 비슷
Stack
Stack은 값을 수직으로 쌓아놓고 넣었다가 빼서 조회하는 형식으로 데이터를 관리 한다
이걸 “나중에 들어간 것이 가장 먼저 나온다(Last-In-First-out)” 성질을 가졌다고 표현하며,
주로 상자와 비유해서 설명한다
특징
• 상자에 물건을 넣고 빼는것처럼 밑에서 위로 쌓고, 꺼낼때는 위에서 부터 꺼내는 형식이다
• 그렇기 때문에 넣는 기능( push() ) 과 조회( peek() ), 꺼내는( pop() ) 기능만 존재한다
• 이렇게 불편하게 쓰는 이유는 최근 저장된 데이터를 나열하고 싶거나 데이터의 중복처리를 막고싶을때 사용
기능
• 선언 : Stack<Integer> intStack 형태로 선언합
• 생성 : new Stack<Integer>(); 형태로 생성
• 추가 : intStack.push({추가할 값}) 형태로 값을 추가
• 조회 : intStack.peek() 형태로 맨 위값을 조회
• 꺼내기 : intStack.pop() 형태로 맨 위값을 꺼냄 ( 꺼내고 나면 삭제됨)
코드로 정리하자
// Stack
// (사용하기 위해선 import java.util.Stack; 를 추가해야합니다.)
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<Integer> intStack = new Stack<Integer>(); // 선언 및 생성
intStack.push(1);
intStack.push(2);
intStack.push(3);
while (!intStack.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intStack.pop()); // 3,2,1 출력
}
// 다시 추가
intStack.push(1);
intStack.push(2);
intStack.push(3);
// peek()
System.out.println(intStack.peek()); // 3 출력
System.out.println(intStack.size()); // 3 출력 (peek() 할때 삭제 안됐음)
// pop()
System.out.println(intStack.pop()); // 3 출력
System.out.println(intStack.size()); // 2 출력 (pop() 할때 삭제 됐음)
System.out.println(intStack.pop()); // 2 출력
System.out.println(intStack.size()); // 1 출력 (pop() 할때 삭제 됐음)
while (!intStack.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intStack.pop()); // 1 출력 (마지막 남은거 하나)
}
}
}
Queue 🥤
Queue 은 빨대🥤처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합
특징
• First In First Out : 먼저들어간 순서대로 값을 조회할 수 있다
• 그렇기 때문에 넣는 기능( add() ), 조회( peek() ), 꺼내는( poll() ) 기능만 존재
• Queue 는 생성자가 없는 껍데기라서 바로 생성할수는 없다 (껍데기 = 인터페이스)
• 생성자가 존재하는 클래스인 LinkedList를 사용하여 Queue를 생성해서 받을 수 있다
// LinkedList를 생성하면 Queue 기능을 할 수 있습니다. (Queue 가 부모/ LinkedList 가 자식이기 때문)
Queue<Integer> intQueue = new LinkedList<Integer>();
기능
• 선언 : Queue<Integer> intQueue 형태로 선언
• 생성 : new LinkedList<Integer>(); 형태로 생성
• 추가 : intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가
• 조회 : intQueue.peek() 형태로 맨 아래값을 조회
• 꺼내기 : intQueue.poll() 형태로 맨 아래값을 꺼냄 (꺼내고나면 삭제됨)
코드로 알아보자
// Queue
// (사용하기 위해선 java.util.LinkedList; 와 import java.util.Queue; 를 추가해야합니다.)
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
Queue<Integer> intQueue = new LinkedList<>(); // 선언 및 생성
intQueue.add(1);
intQueue.add(2);
intQueue.add(3);
while (!intQueue.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intQueue.poll()); // 1,2,3 출력
}
// 다시 추가
intQueue.add(1);
intQueue.add(2);
intQueue.add(3);
// peek()
System.out.println(intQueue.peek()); // 1 출력 (맨먼저 들어간값이 1 이라서)
System.out.println(intQueue.size()); // 3 출력 (peek() 할때 삭제 안됐음)
// poll()
System.out.println(intQueue.poll()); // 1 출력
System.out.println(intQueue.size()); // 2 출력 (poll() 할때 삭제 됐음)
System.out.println(intQueue.poll()); // 2 출력
System.out.println(intQueue.size()); // 1 출력 (poll() 할때 삭제 됐음)
while (!intQueue.isEmpty()) { // 다 지워질때까지 출력
System.out.println(intQueue.poll()); // 3 출력 (마지막 남은거 하나)
}
}
}
Set📚
📌 Set 은 순서가 없는 데이터의 집합 (데이터 중복 허용 안함) - 순서없고 중복없는 배열
특징
• 순서가 보장되지 않는 대신 중복을 허용하지 않도록 유지할 수 있다
• Set은 그냥 Set 으로 쓸수도있지만 HashSet , TreeSet 등으로 응용하여 사용 가능
• Set은 생성자가 없는 껍데기라서 바로 생성할수는 없다. (껍데기 = 인터페이스)
• 생성자가 존재하는 클래스인 HashSet 를 사용하여 Set 를 생성해서 받을 수 있다
기능
• 선언 : Set<Integer> intset 형태로 선언
• 생성 : new HashSet<Integer>(); 형태로 생성
• 추가 : intSet.add({추가할 값}) 형태로 값을 맨 위에 추가
• 조회 : intSet.get({조회할 순번}) 형태로 맨 아래값을 조회
• 삭제 : intSet.remove({삭제할 값}) 형태로 삭제할 값을 직접 지정
• 포함확인 : intSet.contains({포함확인 할 값}) 형태로 해당값이 포함 돼 있는지 boolean 값으로 응답 받음
Tip
🔎 HashSet 외에도 TreeSet , LinkedHashSet 이 있다.
HashSet : 가장 빠르며 순서를 전혀 예측할 수 없음
TreeSet : 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있음
LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능
즉, 보통 HashSet 을 쓰는데 순서보장이 필요하면 LinkedHashSet 을 주로 사용합니다.
코드로 알아보자
// Set
// (사용하기 위해선 import java.util.Set; 와 java.util.HashSet; 를 추가해야합니다.)
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> intSet = new HashSet<Integer>(); // 선언 및 생성
intSet.add(1);
intSet.add(2);
intSet.add(3);
intSet.add(3); // 중복된 값은 덮어씁니다.
intSet.add(3); // 중복된 값은 덮어씁니다.
for (Integer value : intSet) {
System.out.println(value); // 1,2,3 출력
}
// contains()
System.out.println(intSet.contains(2)); // true 출력
System.out.println(intSet.contains(4)); // false 출력
// remove()
intSet.remove(3); // 3 삭제
for (Integer value : intSet) {
System.out.println(value); // 1,2 출력
}
}
}
Map 👫
📌 여태까지 value 값들만 넣어서 관리하는 분류통(자료구조)를 배웠다면 Map 은 key-value 구조로 구성된 데 이터를 저장할 수 있다
특징
• key-value 형태로 데이터를 저장하기 때문에 기존에 순번으로만 조회하던 방식에서, key 값을 기준으로 vlaue 를 조회할 수 있다
• key 값 단위로 중복을 허용하지 않는 기능을 가지고 있다
• Map 은 그냥 Map 으로 쓸수도있지만 HashMap , TreeMap 등으로 응용하여 사용할 수 있다
• Map 으로 쓸수도있지만 HashSet , TreeSet 등으로 응용하여 사용할 수 있다
기능
• 선언 : Map<String, Integer> intMap 형태로 Key타입과 Value타입을 지정해서 선언
• 생성 : new HashMap<>(); 형태로 생성
• 추가 : intMap.put({추가할 Key값},{추가할 Value값}) 형태로 Key에 Value값을 추가
• 조회 : intMap.get({조회할 Key값}) 형태로 Key에 있는 Value값을 조회
• 전체 key 조회 : intMap.keySet() 형태로 전체 key 값들을 조회
• 전체 value 조회 : intMap.values() 형태로 전체 value 값들을 조회
• 삭제 : intMap.remove({삭제할 Key값}) 형태로 Key에 있는 Value값을 삭제
Tip
🔎 HashMap 외에도 TreeMap 이 있다.
HashMap : 중복을 허용하지 않고 순서를 보장하지 않음 , 키와 값으로 null이 허용
TreeMap : key 값을 기준으로 정렬을 할 수 있습니다. 다만, 저장시 정렬(오름차순)을 하기 때문에 저장시 간이 다소 오래 걸림
코드로 알아보자
// Map
// (사용하기 위해선 import java.util.Map; 를 추가해야합니다.)
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> intMap = new HashMap<>(); // 선언 및 생성
// 키 , 값
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14); // 중복 Key값은 덮어씁니다.
intMap.put("삼", 15); // 중복 Key값은 덮어씁니다.
// key 값 전체 출력
for (String key : intMap.keySet()) {
System.out.println(key); // 일,이,삼 출력
}
// value 값 전체 출력
for (Integer key : intMap.values()) {
System.out.println(key); // 11,12,15 출력
}
// get()
System.out.println(intMap.get("삼")); // 15 출력
}
}
Tip
🔎 length vs length() vs size() - 길이값 가져오기
1. length
• arrays(int[], double[], String[])
• length 는 배열의 길이를 조회해준다.
2. length()
• String related Object(String, StringBuilder etc)
• length() 는 문자열의 길이를 조회해준다. (ex. “ABCD”.length() == 4)
3. size()
• Collection Object(ArrayList, Set etc)
• size() 는 컬렉션 타입목록의 길이를 조회해준다.
마무리🔥
리스트 종류가 엄청 많다 확실히 잘 알아놔야 할거 같다
'TIL' 카테고리의 다른 글
TIL - 2024/05/08 (2) | 2024.05.08 |
---|---|
TIL - 2024/05/07 (0) | 2024.05.07 |
TIL - 2024/05/02 (0) | 2024.05.02 |
TIL - 2024/05/01 (0) | 2024.05.01 |
TIL - 2024/04/30 (0) | 2024.04.30 |