코딩과 결혼합니다

231015 - 자바의 정석 chapter 11 (컬렉션 프레임워크2) 본문

2세/Java

231015 - 자바의 정석 chapter 11 (컬렉션 프레임워크2)

코딩러버 2023. 10. 15. 21:33
728x90

Iterator, ListIterator, Enumeration

  • 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스
  • Enumeration은 Iterator의 구버전
  • ListIterator는 Iterator의 접근성을 향상시킨 것 (단방향 ➡️ 양방향)
  • Iterator
    • 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화
    • 컬렉션에 Iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용
// boolean hasNext() : 읽어 올 요소가 남아있는지 확인
// Object next() : 다음 요소를 읽어 온다. 

List list = new ArrayList();
Iterator it = list.iterator();

while(it.hasNext()){
   System.out.println(it.next());
}

 

Map과 Iterator

  • Map에는 Iterator()가 없다. keySet(), entrySet(), values()를 호출해야 한다.
Map map = new HashMap();
...
Iterator it = map.entrySet().iterator();

 

 

 

⭐Arrays

  1. 배열의 출력 - toString()
  2. 배열의 복사 - copyOf(), copyOfRange()
  3. 배열 채우기 - fill(), setAll()
  4. 배열의 정렬과 검색 - sort(), binarySearch()
    *배열을 정렬한 후에 값을 찾아야 정확한 결과가 나온다. (이진탐색 ➡️ 정렬된 배열에만 사용 가능)
  5. 다차원 배열의 출력 - deepTostring()
  6. 다차원 배열의 비교 - deepEquals()
  7. 배열을 List로 변환 - asList(Object...a)
  8. 람다와 스트링 관련 - parallelXXX(), spliterator(), stream()
//읽기 전용
List list = Arrays.asList(new Integer[]{1,2,3,4,5});
List list = Arrays.asList(1,2,3,4,5);
list.add(6); //예외 발생

//변경 가능
List list = new ArrayList(Arrays.asList(1,2,3,4,5));

 

 

 

⭐Comparator와 Comparable

  • 객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스
Comparable : 기본 정렬기준을 구현하는데 사용
Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
  • compare()와 compareTo는 두 객체의 비교결과를 반환하도록 작성
  • compare() // 두 객체를 비교
  • compareTo  // 주어진 객체를 자신과 비교 

 

 

⭐HashSet (순서❌, 중복❌)

  • HashSet
    • Set인터페이스를 구현한 대표적인 컬렉션 클래스
    • 순서를 유지하려면 LinkedHashSet클래스를 사용하면 된다.
    • 객체를 저장하기전에 기존에 같은 객체가 있는지 확인
    • boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출
      equals()와 hashCode()가 오버라이딩 되어 있어야 
  • HashSet 주요 메서드
    • HashSet()
    • HashSet(Collection c) - 생성
    • HashSet(int initalCapacity) - 초기용량
    • HashSet(int initalCapacity, float loadFactor) - +언제 용량을 늘릴 건지
    • boolean add(Object o) - 저장할 객체의 equals()와 hashCode()를 호출
    • boolean add All(Collection c) - 합집합
    • boolean remove(Object o) 
    • boolean remove All(Collection c) - 교집합
    • boolean retainAll(Collection c) - 컬렉션에 있는 것만 남기고 삭제, 차집합
    • void clear()
    • boolean contains(Object o)
    • boolean containsAll(Collection c) - 여러 객체가 모두 포함되어 있는지?
    • Iterator iterator()
    • boolean isEmpty()
    • int size()
    • Object[] to Array()
    • Object[] to Array(Object[] a)
  • TreeSet
    • 범위 검색과 정렬에 유리한 컬렉션 클래스 ( from ~ to )
    • HashSet보다 데이터 추가, 삭제에 시간이 더 걸림
    • 이진 탐색 트리로 구현. 범위 탐색과 정렬에 유리
    • 이진 트리는 모든 노드가 최대 2개의 하위 노드를 가짐
  • 이진 탐색트리
    • 부모보다 작은 값은 왼쪽 큰 값은 오른쪽에 저장
    • 데이터가 많아질 수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가)
  • TreeSet 주요 메서드
    • TreeSet(Comparator comp) - 비교 후 저장
    • Object first() -  첫 번째 객체 반환. 제일 小
    • Object last() -  마지막 객체 반환. 제일 大
    • Object ceiling(Object o) - 저장된 객체와 같은 객체를 반환, 없으면 큰 값을 가진 객체 중 제일 가까운 값의 객체 반환, 없으면 null
    • Object higer(Object o) - 지정된 객체보다 큰 값을 가진 객체 중 제일 가까운 값의 객체를 반환 
    • Object higer(Object o) - 지정된 객체보다 작은 값을 가진 객체 중 제일 가까운 값을 객체를 반환
    • SortedSet subSet ( Object fromElement, Object toElement) - 범위 검색 (끝 범위는 범위에 포함되지 않음)
    • SortedSet headSet ( Object toElement) - 지정된 객체보다 작은 값의 객체들을 반환
    • SortedSet tailSet ( Object toElement) - 지정된 객체보다  값의 객체들을 반환

 

 

⭐HashMap과 Hashtable (순서❌, 중복(키❌,  값⭕))

  • Map인터페이스를 구현. 데이터를 키와 값 쌍으로 저장
  • HashMap(동기화 x)은 Hashtable(동기화 o)의 신버전
  • HashMap
    • Map인터페이스를 구현한 대표적인 컬렉션 클래스
    • 순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다.
    • 키와 값 - 해싱 기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.
  • TreeMap
    • 범위 검색과 정렬에 유리한 컬레션 클래스
    • HashMap보다 데이터 추가, 삭제에 시간이 더 걸림
  • 해싱 
    • 해시함수를 이용해서 해시테이블에 저장하고 읽어오는 것
    • 해시테이블을 배열과 링크드 리스트가 조합된 형태
    • 해시테이블에 저장된 데이터를 가져오는 과정
      1.  키로 해시함수를 호출해서 해시코드를 얻는다.
      2. 해시코드에 대응하는 링크드리스트를 배열에서 찾는다.
      3. 링크드리스트에서 키와 일치하는 데이터를 찾는다.

 

 

⭐Collections - 컬렉션을 위한 메서드(static)를 제공

  1. 컬랙션 채우기, 복사, 정렬, 검색 - fill(), copy(), sort(), binarySet() 등
  2. 컬렉션의 동기화 - synchronizedXXX()
  3. 변결불가(read Only)컬랙션 만들기 - unmodifiableXXX()
  4. 싱클톤 컬렉션 만들기 - singletonXXX()
  5. 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()