[Java]Collection Framework : 자료구조

Collection이란?

자료구조 : 가변형이기 때문에 배열을 대처하는 기능을 함

  • 장점
    • 라이브러리이기 때문에 표준화되어 있다.
    • 데이터를 모아서 처리하게 쉽게 제공한다.
    • 메모리 저장해서 사용시 편리하다.
  • 단점
    • 메모리(프로그램 종료하면 이전에 입력했던 내용이 사라짐) => 대안 : 파일과 연동해서 영구저장
    • 모든 데이터형을 마구잡이로 저장 가능해서, 형변환이 어려움 => 대안 : 제네릭스 프로그램으로 일관되게 입력
  • 사용되는 프로그램 : 입출력
    • CURD프로그램 : 읽기 get(), 저장 add(), 삭제 remove(), 수정 set(), 저장갯수 가져오기 size()

컬렉션의 종류

image

1. List

List : 순서가 있고 중복된 데이터 추가

  • index번호로 값을 찾음
  • 데이터베이스에 자주 사용됨
  • 종류(아래 5가지 메소드는 동일)
    • ArrayList : 비동기화 , 인스턴스 메소드(new로 메모리 공간 생성)
    • Vector : 동기화
    • LinkedList
    • Queue
    • Stack
Tip

동기화 vs 비동기화

  • 동기화(synchronized) : 한놈들어가고 나오면 다른놈들어가는것
  • 비동기화 : 여러놈이 들어가서 쓰는 것 (동기화보다 빠름)
  • 인터페이스이기 때문에 인터페이스를 구현하고 있는 클래스를 이용해서 메모리 할당을 한다.
  • 순서가 있다.
  • 중복된 데이터를 사용할 수 있다.

1.1 ArrayList

image

  • 비동기화
  • 맨 뒤에 붙일 땐 속도 빠름
  • 중간 삽입은 번호를 새로 매겨야 해서 속도 느림
  • Vector(동기화) , LinkedList(속도 가장 빠름)와 동일

  • 인스턴스 메소드(new로 메모리 공간 생성) : ArrayList list = new ArrayList();

  • 기본형이 Object이기 때문에 꼭 형변환 시켜서 값 읽어줘야 함
    • int a=(int)list.get(0);, double d= (double) list.get(1);
  • 데이터 형을 맞춰서 입력해줘야 편함
  • 데이터형이 뒤섞여있으면 for-each사용 불가

  • 특정 index위치에 데이터 삽입 가능함 list.add(1,"강강강")
    • 원래 있던 데이터는 추가된 만큼 index번호가 뒤로 밀림
  • 리스트에 데이터 추가 : list.add("홍길동");
  • 리스트 크기 확인 : list.size();
  • 리스트 수정 : names.set(2, "둘리");
  • 리스트 전체 삭제 : names.clear();

1.2 LinkedList

image

  • LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있다고 보면 된다.

  • ArrayList와 같이 데이터의 추가, 삭제시 불필요한 데이터의 복사가 없어 데이터의 추가, 삭제시에 유리하다
  • 반면 데이터의 검색시에는 처음부터 노드를 순회해야 하기 때문에 성능상 불리하다.

1.3 Queue

image

  • 메서드 image

1.4 Stack

image

  • 메서드 image

2. Set

Set : 순서가 없고 중복이 없는 데이터 추가

  • 인터페이스이다.
  • 순서가 없다
  • 중복된 데이터를 사용할 수 없다.
  • 탐색기에 자주 사용됨
  • 종류
    • HashSet
    • TreeSet

2.1 HashSet vs TreeSet

  • 구현방식

  • HashSet은 해싱을 이용해 구현

  • TreeSet은 이진탐색트리를 이용해 구현

  • 속도

  • HashSet > TreeSet

  • 해싱이 이진탐색트리보다 빠름

  • 정렬 기능

  • HashSet < TreeSet

  • 이진탐색트리를 이용했기 때문에 데이터 정렬이 가능

3. Map

Map : Key,Data 두 개를 동시에 저장

  • 클래스 관리에 자주 쓰임(spring)
  • 종류
    • Hashtable
    • HashMap
  • 키와 값을 나눠서 저장할 수 있는 공간이다.
  • 키는 중복될 수 없다.
  • 값은 중복될 수 있다.
  • 클래스를 미리 메모리할당하고 키를 이용해서 할당된 주소를 찾아서 사용할 때 많이 사용한다.
  • 웹에서 사용되는 request,response,session,cookie 들이 Map방식으로 저장된다.

3.1 HashMap

  • put() : 값 입력할때
  • get() : 값 자져올때
  • clear()

3.2 Hashtable

  • 일반적으로 동기화가 필요 없다면 HashMap을, 동기화 보장이 필요하다면 Hashtable을 사용하면된다.
  • HashMap과 Hashtable은 동기화를 보장하느냐 하지 않느냐는 측면 이외에는 차이가 거의 없다.