Coding/언어-JAVA

JAVA Collection Framework 2/2 #Day5

꿀딴지- 2023. 8. 7. 14:48

List : ArrayList, LinkedList

  • 순서ㅇ(index), 중복 ㅇ

ArrayList : 배열과 구조가 유사한 list 구현 클래스

  • 내부는 배열로 구현되어 있음.(배열보다 사용성이 좋음)
  • 길이를 자동으로 확장해줌(배열은 사이즈 고정), 미지정 시 default caplacity는 10이나 필요에따라 자동으로 확장.

LinkedList : 각 요소가 논리적으로 연결된 list 구현 클래스 ⇒ 더블링크드 리스트

  • 메모리에 연결되어있지는 않은데, 각 노드가 앞, 뒤(Prev, Next) 노드를 가르키고 있음
  • List인터페이스를 구현하기 때문에 ArrayList와 LinkedList 의 메소드가 거의 유사함

 

  요소
인접 여부
검색 순차 접근
(추가, 삭제)
중간 접근
(추가, 삭제)
Capacity
ArrayList O (상대적으로) 빠름
첫주소 + 인덱스
(빠름)
기존 요소 이동 불필요
(느림)
전부 이동해야 함
default 10개
LinkedList X (상대적으로) 느림
앞/뒤에서부터 Next/Prev를 따라서
원하는 곳까지 찾아감
(느림)
하나를 생성/삭제할때마다
객체가 생성/삭제되어야 함
(빠름)
가르키는 주소값만 변경해주면 됨
유동적

⇒ 데이터의 잦은 변경이 예상되면 LinkedList, 데이터의 갯수가 변하지 않는다면 ArrayList 사용


Set : HashSet, TreeSet

  • 순서 X, 중복 X →  index가 없기 때문에 값 자체로 식별해야 함

HashSet : 해시코드를 사용하여 데이터의 중복을 배제하는 Set 구현 클래스

TreeSet : 이진탐색트리를 사용하여 객체를 저장하는 Set 구현 클래스

  • 하나의 부모 노드가 최대 두 개의 자식 노드와 연결되는 이진트리(Binary Tree)의 일종으로, 정렬과 검색에 특화된 자료 구조
  • 모든 왼쪽 자식의 값이 루트나 부모보다 작고, 모든 오른쪽 자식의 값이 루트나 부모보다 큰 값을 가지는 특징
  • 데이터를 추가할 때 정렬을 실시함

Iterator

  • 순회를 시켜주는 객체(Collection을 표준화된 방법으로 순회)
  • Iterable 인터페이스를 구현하고 있는 collection 만 가능함 : List, Set (Map은 Set으로 바꿔서 순회함)
    • hasNext() : 읽어올 객체가 남아있는지 여부 T/F - cursor(필드)가 현재 위치를 기억하고 있음
    • next() : 컬렉션에서 하나의 객체를 읽어옴. cursor(필드)의 값
    • remove() : next()를 통해 읽어온 객체를 삭제. next()호출 후 사용

Map : HasMap, TreeMap

  • 순서X, (Key 중복 X, Value 중복 O)
  • Key-Value(각각이 객체)의 쌍으로 구성된 Entry 객체를 저장

HashMap

  • 해시코드를 사용하여 데이터를 저장하는 Map 구현 클래스
    • key의 중복 배제 : key → hash함수 → 다이제스트 + 처리 ⇒ 해시맵의 index가 됨
    • 해시맵의 사이즈는 정해져 있어, 처리과정에서 인덱스가 겹칠 수 있음(해시충돌) → 링크드리스트로 처리
  • 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능
  • keySet()이나 entrySet() 메서드를 이용해 Set 형태로 반환된 컬렉션에 iterator()를 호출하여 반복자를 만든 후, 반복자를 통해 순회

 

(요약)

  Collection
implement Iterable
List
implement Collection
Set
implement Collection
Map  
객체 추가 boolean add(Obj o)
            / addAll(Collection c)
  boolean add(Obj o)
//중복객체면 false
  주어진 객체 및 컬렉션의 객체들을 컬렉션에 추가
        Object put(Obj key, Obj value) 주어진 키로 값을 저장. 해당 키가 새로운 키일 경우 null을 리턴, 같은 키가 있으면 기존의 값을 대체하고 대체되기 이전의 값을 리턴.
    void add(int index, Obj element)     주어진 인덱스에 객체 추가
    boolean addAll(int index, Collection c)     주어진 인덱스에 컬렉션 추가
    Object set(int index, Object element)   Object setValue(Object value) - 주어진 위치에 객체 저장 - Entry 객체의 Value 객체를 인자로 전달한 value 객체로 바꿈
객체 삭제 void clear()     void clear() 컬렉션에 저장된 모든 객체 삭제 모든 Map.Entry(키와 값)을 삭제
    Object remove(int index)   Object remove(Object key) 주어진 인덱스에 저장된 객체를 삭제하고, 삭제된 객체 반환 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴
  boolean remove(Object o)
            / removeAll(Collection c)
boolean remove(Object o)     주어진 객체를 삭제하고 성공여부 리턴
  boolean retainAll(Collection c)       주어진 컬렉션을 제외한 모든 객체를 컬렉션에서 삭제하고, 컬렉션에 변화가 있는지를 리턴
객체 검색 boolean isEmpty()     boolean isEmpty() 컬렉션이 비어있는지를 확인합니다.
  boolean equals(Obj o)     boolean equals(Obj o) 컬렉션이 동일한지 확인
  int size()     int size() 저장된 전체 객체(Entry 객체) 수 리턴
  boolean contains(Object o)
              / containsAll(Collection c)
      주어진 객체 및 컬렉션이 저장되어 있는지를 리턴
        boolean containsKey(Object key) 주어진 키가 있으면 true, 없으면 false
        boolean containsValue(Object value) 주어진 값이 있으면 true, 없으면 false
  Iterator iterator()       컬렉션의 iterator를 리턴
        int hashCode() Entry 객체의 해시코드를 반환
    Object get(int index)
<linkedList>
- getFirst()
- getLast()
  Object get(Object key)
Object getKey()
Object getValue()
주어진 인덱스에 저장된 객체를 반환
        Set entrySet()
Set keySet()
- 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴 - 모든 키를 Set 객체에 담아서 리턴
        Collection values() 저장된 모든 값을 Collection에 담아서 리턴
    int indexOf(Obj o)
   / lastIndexOf(Obj o)
    순방향 / 역방향으로 탐색하여 주어진 객체의 위치를 반환
    Listiterrator listIterator()
                   / listIterator(int index)
    List의 객체를 탐색할 수 있는 ListIterator 반환 / 주어진 index부터 탐색할 수 있는 ListIterator 반환
    List subList(int fromIndex, int toIndex)     fromIndex부터 toIndex에 있는 객체를 반환
객체 변환 Object[] toArray()       컬렉션에 저장된 객체를 객체배열(Object [])로 반환
  Object[] toArray(Object[] a)       주어진 배열에 컬렉션의 객체를 저장해서 반환
객체 정렬   void sort(Comparator c)     주어진 비교자(comparator)로 List를 정렬

'Coding > 언어-JAVA' 카테고리의 다른 글

JAVA Generic 타입제한 2/2 #Day6  (0) 2023.08.10
JAVA Generic 2/1 #Day6  (0) 2023.08.09
JAVA Collection Framework 1/2 #Day5  (0) 2023.08.07
JAVA 클래스, 메서드 구성 형태  (0) 2023.08.05
JAVA 인터페이스, 다형성 실습 #Day4  (0) 2023.08.03