[Java] 자료구조 컬렉션

Local Gaji·2023년 9월 2일

이것이 자바다

목록 보기
15/18

List 컬렉션

객체를 인덱스로 관리한다.


🎈 List 인터페이스의 공통 메서드

분류메서드역할
추가add(E e)객체 e 를 맨 끝에 추가 (+ 성공 여부 리턴)
추가add(int i, E e)객체 e 를 인덱스 i 에 추가
추가set(int i, E e)인덱스 i 에 저장된 객체를 객체 e 로 대체
탐색contains(E e)객체 e 가 저장되어 있는지 여부를 리턴
탐색get(int i)인덱스 i 에 저장된 객체를 리턴
탐색isEmpty()리스트가 비어있는지 여부를 리턴
탐색size()리스트 길이 리턴
삭제clear()리스트에 있는 모든 객체 삭제
삭제remove(int i)인덱스 i 에 저장된 객체를 삭제하고, 해당 객체 리턴
삭제remove(E e)객체 e 를 삭제 (+ 성공 여부 리턴)

객체 삭제 시, 뒤의 인덱스들이 1씩 당겨지고 리스트의 길이가 줄어든다.


🎈 ArrayList

가장 흔하게 사용되는 리스트 인터페이스로, 배열과 달리 객체를 제한없이 추가할 수 있다.

List<E> list = new ArrayList<>();  // 지정된 타입 객체만 저장
List list = new ArrayList();       // 모든 타입 객체를 저장

🎈 Vector

ArrayList 와 동일한 구조지만, 멀티 스레드에서 각 스레드가 Vector 리스트를 동시에 편집할 수 없으므로, 멀티스레드 환경에서 안전하다.

List<E> list = new Vector<>();  
List list = new Vector();       

🎈 LinkedList

연결리스트의 구조를 사용하지만, 사용 방법은 ArrayList 와 동일하다.
삭제 / 삽입이 빈번하게 발생할 경우 효율적이다.

List<E> list = new LinkedList<>();  
List list = new LinkedList();       

Set 컬렉션

집합, 순서 없음, 인덱스X, 중복X


🎈 Set 인터페이스의 공통 메서드

분류메서드역할
추가add(E e)객체 e 를 추가 ( + 성공 여부 리턴, 중복이면 false )
탐색contains(E e)객체 e 가 저장되어 있는지 여부를 리턴
탐색isEmpty()집합이 비어있는지 여부를 리턴
탐색size()집합 길이 리턴
탐색iterator()집합에 저장된 객체를 한 개씩 리턴
삭제clear()집합에 있는 모든 객체 삭제
삭제remove(E e)객체 e 를 삭제 (+ 성공 여부 리턴)

🎈 HashSet

가장 흔하게 사용되는 Set 인터페이스

Set<E> set = new HashSet<>();
Set set = new HashSet();

객체의 주소가 달라도 hashCode() 가 같고 equal() 에서 true 면 중복으로 처리한다.
클래스 E 안에서 hashCode()equal() 메서드를 재정의하여 중복 처리 옵션을 수정할 수 있다.


🔰 Set 에서 반복문 사용

Iterator<E> iterator = set.iterator();

while( iterator.hasNext() ) {  // 안 가져온 객체가 남아있는지 확인
  E e = iterator.next();       // 현재 객체 가져오기
  iterator.remove();           // 현재 객체 제거
}

또는 for(E e : set) 반복문을 사용할 수 있다.


🎈 TreeSet

이진트리를 기반으로 하는 set 컬렉션으로, 효율적인 탐색이 가능하다.

TreeSet 정리


Map 컬렉션


key : value 쌍으로 이루어진 엔트리 객체를 저장한다.
key 는 중복으로 저장할 수 없고 value 는 중복으로 저장할 수 있다.

🎈 Map 인터페이스의 공통 메서드

분류메서드역할
추가put(K key, V value)키 : 값 쌍 저장 (+ 성공 시 값을 리턴)
탐색get(K key)키로 값을 조회, 값을 리턴
탐색containsKey(K key)해당 키가 있는지 여부를 리턴
탐색containsValue(V value)해당 값이 있는지 여부를 리턴
탐색isEmpty()Map 이 비어있는지 여부 리턴
탐색size()키의 총 개수 리턴
탐색keySet()저장된 모든 키를 set 에 담아서 리턴
탐색values()저장된 모든 값을 collection 에 담아서 리턴
탐색entrySet()모든 Entry 를 set 에 담아서 리턴
삭제clear()모든 Entry 삭제
삭제remove(K key)해당 키와 값 쌍을 삭제하고, 값을 리턴

🎈 HashMap

Map<K, V> map = new HashMap<>();
Map map = new HashMap();    // 모든 타입 저장 (거의 안씀)

🎈 HashTable

HashMap 과 동일한 구조지만, 멀티 스레드에서 각 스레드가 HashTable 맵을 동시에 편집할 수 없으므로, 멀티스레드 환경에서 안전하다.

Map<K, V> map = new HashTable<>();
Map map = new HashTable();    // 모든 타입 저장 (거의 안씀)

🎈 TreeMap

이진트리를 기반으로 하는 Map 컬렉션으로, 효율적인 탐색이 가능하다. 트리에 키:값 엔트리가 저장되며 키를 기준으로 정렬된다.

TreeMap 정리


스택, 큐


🎈 Stack

Stack<E> stack = new Stack<>();

stack.push(E e);
E popE = stack.pop();

🎈 Queue

큐는 LinkedList 를 이용해서 생성한다.

Queue <E> queue = new LinkedList<>();

queue.offer(E e);           // 넣기
E pollE = queue.poll();     // 빼기

0개의 댓글