티스토리 뷰

반응형

[Java의 정석 - http://www.yes24.com/Product/Goods/24259565]

 

1. 컬렉션 프레임웍(Collections Framework)

  • 데이터 군을 저장하는 클래스들을 표준화한 설계
    • 컬렉션 : 다수의 데이터, 데이터 그룹
    • 프레임웍 : 표준화된 프로그래밍 방식

1.1 컬렉션 프레임웍의 핵심 인터페이스

  • 컬렉션 프레임웍의 핵심 인터페이스
    • List : 순서가 있는 데이터의 집합
      • 데이터의 중복을 허용
      • 구현 클래스 : ArrayList, LinkedList, Stack, Vector 등
    • Set : 순서를 유지하지 않는 데이터의 집합
      • 데이터의 중복을 허용하지 않음
      • 구현 클래스 : HashSet, TreeSet 등
    • Map : 키(key)와 값(value)의 쌍(pari)으로 이루어지는 데이터의 집합
      • 순서는 유지되지 않음
      • 키는 중복을 허용하지 않고 값은 중복을 허용함
  • 컬렉션 프레임웍의 모든 컬렉션 클래스들은 List, Set, Map 중의 하나를 구현하고 있음
    • 구현한 인터페이스의 이름이 클래스의 이름에 포함되어 있음
    • Vector, Stack, Hashtable, Properties 등은 예전부터 존재해서 컬렉션 프레임웍의 명명법을 따르지 않음
  • Vector나 Hashtable 대신 ArrayList와 HashMap을 사용하자
  • Collection 인터페이스
    • List와 Set의 조상
    • 컬렉션 클래스를 다루는 가장 기본적인 메서드들을 정의함
    • 메소드( return type이 boolean인 경우 성공하거나 사실이면 true, 그렇지 않으면 false 리턴)
      • boolean add(Object o), boolean addAll(Collection C)
        • 매개변수를 Collection에 추가
      • void clear() : Collection의 모든 객체를 삭제
      • boolean contains(Object O), boolean containsAll(Collection c)
        • 매개변수가 Collection에 포함되어 있는지 확인
      • boolean equals(Object o) : 동일한 Collection인지 비교
      • int hashCode() : Collection의 hash code를 반환
      • boolean isEmpty() : Collection이 비었는지 확인
      • iterator iterator() : Collection의 iterator를 얻어서 반환
      • boolean remove(Object o) : 지정된 객체를 삭제한다
      • boolean removeAll(Collection c) : 지정된 Collection에 포함된 객체들을 삭제한다
      • boolean retainAll(Collection c)
        • 지정된 Collection에 포함된 객체만을 남기고 다른 객체들은 Collection에서 삭제한다
        • 이 작업으로 Collection에 변화가 있으면 true를 그렇지 않으면 false를 반환한다
      • int size() : Collection에 저장된 객체의 개수를 반환한다
      • Object[] toArray() : Collection에 저장된 객체를 객체배열(Object[])로 반환한다
      • Object[] toArray(Object[] a) : 지정된 배열에 Collection의 객체를 저장해서 반환한다
  • List 인터페이스
    • 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용됨
    • 메서드
      • Collection 인터페이스로부터 상속받은 것
      • void add(int index, Object element), boolean addAll(int index, Collection c)
        • 지정된 위치에 객체들을 추가
      • Object get(int index) : 지정된 위치(index)에 있는 객체를 반환
      • int indexOf(Object o) : 지정된 객체의 위치를 반환
        • List의 첫번째 요소부터 순방향으로 찾음
      • int lastIndexOf(Object o) : 지정된 객체의 위치를 반환
        • List의 마지막 요소부터 역방향으로 찾음
      • ListIterator listIterator(), ListIterator listIterator(int index)
        • List의 객체에 접근할 수 있는 ListIterator를 반환
      • Object remove(int index) : 지정된 위치에 있는 객체를 삭제하고 삭제된 객체를 반환함
      • Object set(int index, Object Element) : 지정된 위치에 객체를 저장함
      • void sort(Comparator c) : 지정된 비교자로 List를 정렬
      • List subList(int fromIndex, int toIndex) : 지정된 범위에 있는 객체를 반환
  • Set 인터페이스
    • 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현
    • Set 인터페이스를 구현한 클래스로 HashSet, TreeSet 등이 있음
  • Map 인터페이스
    • 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용됨
    • 키는 중복될 수 없지만 값은 중복을 허용
    • 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게 됨
    • Map 인터페이스를 구현한 클래스로 Hashtable, HashMap, LinkedHaspMap, SortedMap, TreeMap 등이 있음
    • 메서드
      • void clear() : Map의 모든 객체를 삭제함
      • boolean containsKey(Object Key) : 지정된 key 객체와 일치하는 Map의 key 객체가 있는지 확인함
      • boolean containsKey(Object Value) : 지정된 value 객체와 일치하는 Map의 value 객체가 있는지 확인함
      • Set entrySet() : Map에 저장되어 있는 key-value 쌍을 Map.Entry 타입의 객체로 저장한 Set으로 반환
      • boolean equals(Object o) : 동일한 Map인지 비교
      • Object get(Object key) : 지정한 key 객체에 대응하는 value 객체를 찾아서 반환
      • int hashCode() : 해시코드를 반환
      • boolean isEmpty() : Map이 비어있는지 확인
      • Set keySet() : Map에 저장된 모든 key 객체를 반환
        • Map 인터페이스에서 키는 중복을 허용하지 않기 때문에 Set타입으로 반환
      • Collection values() : Map에 저장된 모든 value 객체를 반환
        • Map 인터페이스에서 값은 중복을 허용하기 때문에 Collection 타입으로 반환
      • Object put(Object key, Object value) : Map에 value 객체를 key 객체에 연결(mapping)하여 저장
      • void putAll(Map t) : 지정된 Map의 모든 key-value 쌍을 추가
      • Object remove(Object key) : 지정한 key 객체와 일치하는 key-value 객체를 삭제
      • int size() : Map에 저장된 key-value 쌍의 개수를 반환
  • Map.Entry 인터페이스
    • Map 인터페이스의 내부 인터페이스
    • Map에 저장되는 key-value 쌍을 다루기 위해 내부적으로 정의함
    • Map 인터페이스를 구현하는 클래스에서는 Map.Entry 인터페이스도 함께 구현해야함
    • 메서드
      • boolean equals(Object o) : 동일한 Entry인지 비교
      • Object getKey() : Entry의 key객체를 반환
      • Object getValue() : Entry의 value 객체를 반환
      • int hashCode() : Entry의 해시코드를 반환
      • Object setValue(Object value) : Entry의 value 객체를 지정된 객체로 바꿈

1.2 ArrayList

  • 가장 많이 사용되는 컬렉션 클래스
  • List 인터페이스를 구현
  • 데이터의 저장순서가 유지되고 중복을 허용
  • 기존의 Vector를 개선한 것
  • Object 배열을 이용해서 데이터를 순차적으로 저장
    • elementData의 이름의 Object 배열을 멤버변수로 선언하고 있음
    • 선언된 배열의 타입이 Object이기 때문에 모든 종류의 객체를 담을 수 있음
  • ArrayList의 생성자와 메서드
    • ArrayList() : 크기가 10인 ArrayList를 생성
    • ArrayList(Collection c) : 주어진 컬렉션이 저장된 ArrayList를 생성
    • ArrayList(int initialCapacity) : 지정된 초기용량을 갖는 ArrayList를 생성
    • boolean addAll(Collection c) : 주어진 컬렉션의 모든 객체를 저장
    • boolean addAll(int index, Collection c) : 지정된 위치부터 주어진 컬렉션의 모든 객체를 저장
    • void clear() : ArrayList를 완전히 비움
    • Object clone() : ArrayList를 복제
    • boolean contains(Object o) : 지정된 객체가 ArrayList에 포함되어 있는지 확인
    • void ensureCapacity(int minCapacity) : ArrayList의 용량이 최소한 minCapacity가 되도록 한다
    • Object get(int index) : 지정된 위치에 저장된 객체를 반환
    • int indexOf(Object o) : 지정된 객체가 저장된 위치를 찾아 반환
    • boolean isEmpty() : ArrayList가 비어있는지 확인
    • Iterator iterator() : ArrayList의 Iterator 객체를 반환
    • int lastIndexOf(Object o) : 객체가 저장된 위치를 끝부터 역방향으로 검색해서 반환
    • ListIterator listIterator() : ArrayList의 ListIterator를 반환
    • ListIterator listIterator(int index) : ArrayList의 지정된 위치부터 시작하는 ListIterator를 반환
    • Object remove(int index) : 지정된 위치에 있는 객체를 제거
    • boolean remove(Ojbect o) : 지정한 객체를 제거(성공하면 true, 실패하면 false)
    • boolean retainAll(Collection c) : ArrayList에 저장된 객체 중에서 주어진 컬렉션과 공통된 것들 만을 남기고 나머지는 삭제
    • Object set(int index, Object element) : 주어진 객체를 지정된 위치에 저장
    • int size() : ArrayList에 저장된 객체의 개수를 반환
    • void sort(Compartor c) : 지정된 정렬기준으로 ArrayList를 정렬
    • List subList(int fromIndex, int toIndex) : fromIndex부터 toIndex사이에 저장된 객체를 반환
    • Object[] toArray() : ArrayList에 저장된 모든 객체들을 객체배열로 반환한다
    • Object[] toArray(Object[] a) : ArrayList에 저장된 모든 객체들을 객체배열 a에 담아 반환한다
    • void trimToSize() : 용량을 크기에 맞게 줄인다(빈 공간을 없앤다)
  • 배열의 항목을 삭제할 때 제어변수를 감소시켜가면서 삭제를 해야 자리이동이 발생해도 영향을 받지 않고 작업이 가능하다
  • 저장할 요소의 개수를 고려해서 실제 저장할 개수보다 약간 여유 있는 크기로 생성하는게 좋다
    • 배열의 크기를 늘릴 때 처리시간이 많이 소요됨
  • 배열을 이용한 자료구조는 데이터를 읽어오고 저장하는데는 효율이 좋지만 용얄ㅇ을 변경해야할 때는 새로운 배열을 생성한 후 기존의 배열로부터 새로 생성된 배열로 데이터를 복사해야하기 때문에 상당히 효율이 떨어진다
  • 배열 중간에 위치한 객체를 추가하거나 삭제하는 경우 System.arraycopy()를 호출해서 다른 데이터의 위치를 이동시켜 줘야 하기 때문에 다루는 데이터의 개수가 많을수록 작업시간이 오래 걸린다

(정리에 너무 많은 시간이 걸려서,, 밑에거는 생략.. 책 보는게 낫다!)

1.3 LinkedList

 

1.4 Stack과 Queue

 

1.5 Iterator, ListIterator, Enumeration

 

1.6 Arrays

 

1.7 Compartor와 Comparable

 

1.8 HashSet

 

1.9 TreeSet

 

1.10 HashMap과 Hashtable

 

1.11 TreeMap

 

1.12 Properties

 

1.13 Collections

 

1.14 컬렉션 클래스 정리 & 요약

  • ArrayList
    • 배열 기반
    • 데이터의 추가와 삭제에 불리
    • 순차적인 추가삭제는 제일 빠름
    • 임의의 요소에 대한 접근성(accessibility)이 뛰어남
  • LinkedList
    • 연결기반
    • 데이터의 추가와 삭제에 유리
    • 임의의 요소에 대한 접근성이 좋지 않음
  • HashMap
    • 배열과 연결이 결합된 형태
    • 추가, 삭제, 검색, 접근성이 모두 뛰어남
    • 검색에는 최고성능
  • TreeMap
    • 연결기반
    • 정렬과 검색(특히 범위검색)에 적합
    • 검색성능은 HashMap보다 떨어짐
  • Stack
    • Vector를 상속받아 구현
  • Queue
    • LinkedList가 Queue 인터페이스를 구현
  • Properties
    • Hashtable을 상속받아 구현
  • HashSet
    • HashMap을 이용해서 구현
  • TreeSet
    • TreeMap을 이용해서 구현
  • LinkedHashMap, LinkedHashSet
    • HashMap과 HashSet에 저장순서유지기능을 추가
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함