[자바] 컬렉션 이해하기

박지운·2023년 8월 14일
0

자바 꽉 자바

목록 보기
9/12

컬렉션이란

자바에서는 자료구조와 알고리즘을 구조화하여 클래스로 구현해놓은것이다.
자바의 인터페이스를 사용해 구현된다.

구성 요소

  1. 인터페이스 : 각 컬렉션을 나타낸다. (List, Set, Map) 각 클래스는 상세적인 것은 달라도 일관된 조작법으로 사용가능하다.
  2. 클래스 : 인터페이스의 구현이다. List여도 ArrayList, LinkedList 등으로 상세 구현이 달라진다.
  3. 알고리즘 : 컬렉션이 제공하는 연산, 검색, 정렬 등의 메소드

주요 인터페이스

  1. List 인터페이스
  2. Set 인터페이스
  3. Map 인터페이스

구조상의 차이로 Map인터페이스만 별도로 정의된다.

상속 관계

특징

  • List : 순서가 있는 집합, 중복 허용(Vector, ArrayList, LinkedList, Stack, Queue)
  • Set : 순서가 없는 집합, 중복 허용X (HashSet, TreeSet)
  • Map<K,V> : 키와 값의 한쌍 집합, 순서 없음, 키는 중복 허용하지 않지만 값은 중복 가능하다.(HashMap, TreeMap, Hashtable)

ArrayList

List 인터페이스를 구현한 클래스이며 컬렉션에서 가장 많이 사용된다. 기존 vector를 개선 구현한 것이다. Vector가 있지만 기존 소스와 호환성을 위해 남겨둔 것이므로 ArrayList를 사용하자!

ArrayList는 Objet배열을 이용한다. ArrayList는 벡터처럼 초과시 더 큰 배열을 생성해 새로 사용한다.또한 중요한 점은 중간 객체를 제거하면 바로 뒤부터 마지막 객체까지 모두 앞으로 idx가 1씩 앞당겨진다. 따라서 삭제연산이 많을 경우에는 LinkedList가 효율이 좋다.(읽는 접근 시간은 느리다.)

Iterator

Iterator 인터페이스는 컬렉션에 저장된 요소를 읽어오는 방법이다.

  • boolean hasNext() : 읽어올 요소가 있는지 확인

  • Object next() : 다음 요소 읽어오기(hasNext()로 확인 후 사용 안전)

  • void remove() : 읽어온 요소 삭제(next()가 선행되어야함)

     Iterator<String> iterator = drinks.iterator();
    
          while(iterator.hasNext()){
              String str = iterator.next();
              if(str.equals("soju")){
                  iterator.remove();
              }
          }
    

Map<K, V>

Map 인터페이스는 키와 값으로 구성된 Entry 객체를 저장한다. 해싱을 사용해 방대한 양의 데이터에서도 성능이 뛰어나다. Hashtable : Vector | HashMap : ArrayList의 관계이므로 HashMap을 사용하자.

  • V put(k key, V value) : key와 value저장

  • void clear() : 모든 데이터 삭제

  • V remove(Obejct key) : key와 일치하는 데이터 삭제

  • boolean remove(Object key, Obejct value) : key와 value가 동시에 일치하는 데이터 삭제

  • V replae(k key, V oldValue, V newValue) :key와 oldValue가 일치하면 newValue로 변경

  • V getOrDefault(Object key, V defaultValue) : key와 맵핑된 value값을 반환하고 없으면 defaultValue값을 반환

  • Set keySet( ) : 모든 key 값을 가진 Set 데이터를 반환합니다.

  • Collection values( ) : 모든 value 값을 가진 Collection 데이터를 반환합니다.

    이외에 empty나 size get은 ArrayList와 동일하게 사용하면 된다.


출처 : TCP SCHOOL
kai6666벨로그

profile
앞길막막 전과생

1개의 댓글

comment-user-thumbnail
2023년 8월 14일

정보 감사합니다.

답글 달기