끄적끄적 코딩
Published 2023. 2. 1. 01:43
[Java] List, Set, Map, Sort Java

자료구조
컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미
자료구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미

배열
가장 기본적인 자료 구조 동일한 데이터 타입만 관리 가능

Collection Framework
java.util 패키지
- 다수의 데이터를 쉽게 처리하는 방법 제공 -> DB 처럼 CRUD 기능 중요
collection framework 핵심 interface
Iterable <- collection <- (list set), map

3대 주요 인터페이스
List
순서가 있는 데이터의 집합
순서가 있으므로 데이터의 중복을 허락
ArrayList, LinkedList

Set
순서를 유지하지 않는 데이터의 집합
순서가 없어서 같은 데이터를 구별할 수 없음
중복 허락하지 않음
HashSet, TreeSet

Map
Key와 value의 쌍으로 데이터를 관리하는 집합
순서는 없고 key의 중복 불가
value는 중복 가능
HashMap, TreeMap

Collection interface
추가 add(E e)
        addAll(Collection<? extends E> c)
조회 contains(Object o)
        containsAll(Collection<?> c)
        equals()
        isEmpty()
        iterator()
        size()
삭제 clear()
        removeAll(Collection<?> c)
        retainAll(Collection<?> c)
수정
기타 toArray()

List 
순서가 있는 데이터의 집합

추가 add(int index, E element)
        addAll(int index, Collection<? extends E> c)
조회 get(int index)
        indexOf(Object o)
        lastIndexOf(Object o)
        listIterator()
삭제 remove(int index)
수정 set(int index, E element)
기타 subList(int fromIndex, int toIndex)

배열, ArrayList
가장 기본적인 형태의 자료 구조로 간단하며 사용이 쉬움
접근 속도가 빠름
크기를 변경할 수 없어 추가 데이터를 위해 새로운 배열을 만들고 복사해야함
비 순차적 데이터의 추가 삭제에 많은 시간이 걸림

LinkedList
각 요소를 Node로 정의하고 Node는 다음 요소의 참조 값과 데이터로 구성됨
각 요소가 다음 요소의 링크 정보를 가지며 연속적으로 구성될 필요가 없다

ArrayList <=> LinkedList
순차 추가, 수정, 삭제 : ArrayList가 비교적 빠름
비 순차 추가, 수정, 삭제 : LinkedList가 빠름
조회 : ArrayList가 빠름

특정 클래스가 좋고 나쁨이 아니라 용도에 적합하게 사용해야함
소량의 데이터를 가지고 사용할 경우는 큰 차이가 없음
정적인 데이터 활용, 단순한 데이터 조회용 ArrayList
동적인 데이터 추가, 삭제가 많은 작업 LinkedList

Set interface
순서 없이 주머니에 구슬을 넣는 형태
순서가 없으므로 데이터를 구별할 index가 없어 중복이 허용되지 않는다

동일한 데이터의 기준 = 객체의 equals()가 true를 리턴, hashCode() 값이 같은 경우

Map interface
key와 Value를 하나의 Entry로 묶어서 데이터 관리
key : Object형태로 데이터 중복을 허락하지 않음
Value : Object 형태로 데이터 중복이 허락 됨

추가 put(K key, V value)
        putAll(Map<? extends K, ? extends V> m)
조회 containsKey(Object key)
        containsValue(Object value)
        entrySet() keySet()
        get(Object key)
        values()
        size()
        isEmpty()
삭제 clear()
        remove(Object key)
수정 put(K key, V value)
        putAll(Map<? extends K, ? extends V> m

정렬 
요소를 특정 기준에 대한 내림차순 또는 오름차순으로 배치 하는 것
순서를 가지는 Collection들만 정렬 가능
- List 계열
- Set에서는 SortedSet의 자식 객체
- Map에서는 SortedMap의 자식 객체(key 기준)
- Collections의 sort()를 이용한 정렬 Collections.sort();
- 배열의 정렬 : Arrays.sort(arr, new Comparator<Integer>() { return a -b;});

comparator의 활용 객체가 comparable을 구현하고 있지 않거나 사용자 정의 알고리즘으로 정렬하려는 경우 String을 알파벳 순이 아닌 글자 수 별로 정렬하려면 sort(List<T> list, Comparator<? Super T> c)

1회성 객체 사용 시 anonymous inner class 사용
- 클래스 정의, 객체 생성을 한번에 처리

검색 태그