TIL - 2024/05/03

2024. 5. 3. 22:12· TIL
목차
  1. 배운 내용 🏃
  2. List ⛓ :  순서가 있는 데이터의 집합 (데이터 중복 허용) - 배열과 비슷
  3. Stack
  4. Queue 🥤
  5. Set📚
  6.  Map 👫
  7. 마무리🔥

 

배운 내용 🏃

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
  1. 배운 내용 🏃
  2. List ⛓ :  순서가 있는 데이터의 집합 (데이터 중복 허용) - 배열과 비슷
  3. Stack
  4. Queue 🥤
  5. Set📚
  6.  Map 👫
  7. 마무리🔥
'TIL' 카테고리의 다른 글
  • TIL - 2024/05/08
  • TIL - 2024/05/07
  • TIL - 2024/05/02
  • TIL - 2024/05/01
기석김
기석김
깃허브: https://github.com/kiseokkm
기석김
김기석
기석김
전체
오늘
어제
  • 분류 전체보기 (144)
    • 클라우드 (1)
    • 네트워크 (6)
    • 운영체제 (3)
    • Github&Git (8)
    • CS (2)
    • 스터디 (1)
    • Spring (1)
    • 코딩테스트 (20)
      • Java (6)
      • Mysql (12)
      • Python (2)
    • TIL (93)
    • Intellij (2)
    • 회고 (5)
    • DB (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • From
  • intellij
  • where
  • select
  • MySQL
  • 프로그래머스
  • 스파르타내일배움캠프
  • 내일배움캠프
  • db
  • 프로세스와 스레드 차이
  • bare clone
  • github
  • til
  • Java
  • http
  • Git
  • 개발자질문
  • 스파르타내일배움캠프TIL
  • SQL
  • fork 잔디

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
기석김
TIL - 2024/05/03
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.