study/Java 12

순회, 정렬

1. 순회1 - 직접 구현하는 Iterable, Iterator 각각의 자료 구조마다 순회 방법이 모두 다르다.↓모든 자료 구조를 동일한 방법으로 순회할 수 있다면 편리할 것이다. ↓자바는 이를 위해 Iterable과 Iterator 인터페이스를 제공한다. Iterable 인터페이스의 주요 메서드public interface Iterable { Iterator iterator();} Iterator 인터페이스의 주요 메서드public interface Iterator { boolean hasNext(); E next();} 정리해보면,자료 구조에 다음 요소가 있는지 묻는다->있으면 다음 요소를 꺼내는 과정을 반복->없으면 종료 코드 구현더보기Iterator 구현체import java...

study/Java 2025.04.16

Map, Stack, Queue

1. 컬렉션 프레임워크 - Map 소개 Map은키-값 쌍을 저장하는 자료 구조순서 보장 X, 키는 중복 X, 값은 중복 O키를 통해 값을 빠르게 검색 가능자바는 HashMap, TreeMap, LinkedHashMap 등 다양한 Map 구현체를 제공한다.이 중 HashMap을 가장 많이 사용한다. Map 인터페이스의 주요 메서드메서드설명put(K key, V value)키와 값을 저장. 같은 키가 있으면 값을 덮어씀.putIfAbsent(K key, V value)키가 없을 때만 값을 저장. 기존 값이 있으면 무시.get(Object key)해당 키에 연결된 값을 반환.getOrDefault(Object key, V defaultValue)키가 없으면 기본값을 반환.remove(Object key)해당 ..

study/Java 2025.04.14

Set

1. 자바가 제공하는 Set1 - HashSet, LinkedHashSet Set : 중복 X, 순서 XCollection 인터페이스는 List, Set, Queue와 같은 다양한 하위 인터페이스와 함께 사용된다.Set 인터페이스는 HashSet, LinkedHashSet, TreeSet 등의 여러 구현 클래스를 가지고 있다.Set 구현체는 순서를 보장할 수도, 보장하지 않을 수도 있다. Set 인터페이스의 주요 메서드메서드설명add(e)요소 추가 (중복 X)contains(o)포함 여부 확인remove(o)요소 제거clear()전체 삭제size()요소 개수 HashSet순서 보장 X시간 복잡도 : O(1)hashCode(), equals() 모두 사용한다. LinkedHashSetHashSet에 연결 ..

study/Java 2025.04.11

HashSet

1. 직접 구현하는 Set1 - MyHashSetV1해시 알고리즘을 사용하여 Set(중복 X, 순서 X) 자료구조를 다시 구현해 볼 것이다.이전 강의에서 구현했던 MyHashSetV0은 데이터 추가, 검색 시에 O(n)으로 성능이 나쁘다. 따라서, 해시 알고리즘을 사용하도록 개선된 MyHashSetV1의 코드는 아래와 같다.더보기import java.util.Arrays;import java.util.LinkedList;public class MyHashSetV1 { static final int DEFAULT_INITIAL_CAPACITY = 16; LinkedList[] buckets; private int size = 0; private int capacity = DEFAULT..

study/Java 2025.04.09

List

1.  리스트 추상화1 - 인터페이스 도입 다형성, OCP가 자료 구조에 어떻게 적용될까?  예를 들어, 그림과 같이MyArrayList 와 MyLinkedList 의 공통 기능 -> MyList 인터페이스로 뽑아서 추상화하면 다형성을 활용한 다양한 이점이 있다. MyList 코드더보기public interface MyList { int size(); void add(E e); void add(int index, E e); E get(int index); E set(int index, E element); E remove(int index); int indexOf(E o);} MyArrayList 코드더보기public class MyArrayList implement..

study/Java 2025.04.05

LinkedList

노드와 연결 배열 리스트의 단점배열 리스트는 내부에 배열을 사용해서 데이터를 보관하고 관리한다.배열은 필요한 배열의 크기를 미리 확보해야 한다. -> 공간 낭비 발생앞이나 중간에 데이터를 추가하거나 삭제하는 경우 -> 데이터를 이동으로 인한 성능 저하 발생 노드와 연결(노드를 만들고 각 노드를 서로 연결)낭비되는 메모리 x, 앞이나 중간에 데이터를 추가, 삭제할 때 효율적 노드에 데이터 추가 코드 구현더보기public class Node { Object item; Node next; public Node(Object item) { this.item = item; }}모든 노드 탐색하기더보기Node x = first;while (x != null) { Syst..

study/Java 2025.04.04

ArrayList

배열의 특징1 - 배열과 인덱스배열의 인덱스배열에서 인덱스를 사용하면 데이터가 아무리 많아도 한 번의 연산으로 자료의 위치를 빠르게 찾을 수 있다. 배열의 검색 : 배열에 들어있는 데이터를 찾는 것배열의 검색 시에는 인덱스를 사용해서 한 번에 찾을 수 없다.배열 안의 데이터를 하나하나 확인해야 한다. -> 배열의 크기가 n이면 연산도 n만큼 필요하다. 빅오(O) 표기법빅오(O) 표기법 : 알고리즘의 성능을 분석할 때 사용하는 수학적 표현 방식이다.정확한 실행 시간 계산이 아니라, 성능의 변화 추세를 이해하는 것이다.추세 비교가 목적이므로 상수는 크게 의미가 없다. 따라서, O(n+2), O(n/2) -> O(n)으로 표시한다.보통 최악의 상황을 가정해서 표기한다.O(1) - 상수 시간입력 데이터의 크기에..

study/Java 2025.04.03

Generic

제네릭이 필요한 이유담을 곳이 필요할 때에는 타입별로 클래스를 만들어 줘야 함↓Object를 통해 다형성을 사용해서 해결하기(코드 재사용 O, 타입 안전성 X)장점 : 코드의 중복 제거, 코드 재사용 가능단점1 : 타입 안전성 문제 발생단점2 : (Integer)과 같은 타입 캐스팅 코드가 필요함 (∵ Integer = Object는 자식은 부모를 담을 수 없으므로 성립하지 않음)↓제네릭 적용(코드 재사용 O, 타입 안전성 O)package generic.ex1;public class GenericBox { private T value; public void set(T value) { this.value = value; } public T get() { re..

study/Java 2025.04.01