TIL 2022/11/10 목 (Java 컬렉션)

Woojin·2022년 11월 10일
0

컬렉션이란 여러 데이터들을 그룹으로 묶어놓은 것

이러한 컬렉션을 다루는 데에 있어 편리한 메서드들을 미리 정의해놓은 것을 컬렉션 프레임워크라고 함
컬렉션 프레임워크는 특정 자료 구조에 데이터를 추가, 삭제, 수정, 검색 등의 동작을 수행하는 편리한 메서드들을 제공함

주요 인터페이스 : List, Set, Map

  • List : 데이터의 순서가 유지됨, 중복 저장이 가능한 컬렉션을 구현하는 데 사용됨(ArrayList, Vector, LinkedList)
  • Set : 데이터의 순서가 유지되지 않음, 중복 저장이 불가능한 컬렉션을 구현하는 데 사용됨(HashSet, TreeSet)
  • Map : 데이터의 순서가 유지되지 않음, 키-밸류의 쌍으로 데이터를 저장하는 컬렉션을 구현하는 데에 사용됨, 키는 값을 식별하기 위해 사용되므로 중복저장이 불가능하지만 값은 중복 저장이 가능함.(HashMap, HashTable, TreeMap, Properties)
    이 셋 중에서 리스트와 세트는 서로 공통점이 많아서 collection이라는 인터페이스로 묶임. 이 둘의 공통점이 추출되어 추상화된 것이 바로 collection이라는 인터페이스임

인터페이스는 공통점을 추상화하는 것

* ArrayList

  1. 객체 추가 시에 객체가 인덱스로 관리됨(배열과 비슷 but 배열은 생성될 때 크기 고정, 이건 필요하면 저장용량이 자동으로 늘어남)
  2. 리스트 계열 자료구조의 특성을 이어받아서 데이터가 연속적으로 존재(데이터 순서를 유지함)
    ((인덱스 0부터 차례대로 저장되고 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨지기 때문에, 객체 삽입과 삭제가 잦은 경우는 이거 대신에 LinkedList를 사용하는 게 좋음))

* LinkedList

  1. 이 컬렉션은 데이터를 효율적으로 추가 삭제 변경하기 위해 사용함
  2. 이 컬렉션의 각 요소(node)들은 이전 요소+자신+다음요소의 주소값&데이터로 이루어져 있음(이 세개가 하나로 붙음) 그래서 여기서 데이터를 삭제하려면 삭제 대상 요소의 이전 요소가 삭제 대상 요소의 다음 요소를 참조하도록 변경하면 됨. (링크 끊기) - 배열처럼 데이터를 이동하기 위해 복사할 필요가 없기 때문에 처리 속도가 훨씬 빠름
    ((배열에는 모든 데이터가 연속적으로 존재하지만, 이 컬렉션에서는 불연속적으로 존재하고 데이터끼리 서로 연결(Link)되어있음))

데이터 잦은 변경 예상되면 LinkedList, 데이터 개수 변하지 않고 데이터를 읽을 일이 예상되면 ArrayList


  • iterate : 반복하다
  • iterator : 반복자(컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할)
  • iterator 타입은 제네릭으로 각 요소 타입을 적어줘야 함
Iterator <Integer> iterator = arrayList.iterator();
while (iterator.hasnext()){
...
}

Set : 중복 허용 x, 저장 순서x (인덱스 없음)

* HashSet

: 해시코드를 사용하여 데이터 중복을 검사하는 set 구현 클래스
hashcode() & equals()

* TreeSet

: 이진탐색트리(자료구조)를 사용하여 객체를 저장하는 Set 구현 클래스 - 저장(데이터 추가) 시에 자동정렬이 일어남(오름차순)

Map : key와 value의 쌍으로 구성된 Entry 객체를 저장(저장 순서x) - key : 중복 허용 x, value : 중복 허용 o

HashMap == 해싱을 사용하여 데이터를 저장하는 map
맵 자체로는 iterator 못 함 ( 순회 x)

profile
개발 공부하는 일상

0개의 댓글