Java의 정석 (컬렉션 프레임웍)1-2

ITKHJ·2023년 2월 23일
0

Java

목록 보기
7/12
post-thumbnail

Iterator, ListIterator, Enumeration

-Iterator, ListIterator, Enumeration은 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다.

-Enumeration은 Iterator의 구버전이며, ListIterator는 Iterator의 기능을 향상 시킨 것이다.

Iterator

-컬렉션 프레임웍에서는 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였다.

-컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고 있다.

-Collection인터페이스에서는 'Interator(Interator를 구현한 클래스의 인스턴스)'를 반환하는 iterator()를 정의하고 있다.

-Map인터페이스를 구현한 컬렉션 클래스를 키와 값을 쌍으로 저장하고 있기 때문에 iterator()를 직접 호출할 수 없고, 그 대신 keySet()이나 entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 Iterator를 얻을 수 있다.

-List클래스들은 저장순서를 유지하기 때문에 Iterator를 이용해서 읽어 온 결과 역시 저장순서와 동일하지만, Set클래스들은 각 요소간의 순서가 유지 되지 않기 때문에 Iterator를 이용해서 저장된 요소들을 읽어 와도 처음에 저장된 순서와 같지않다.

ListIterator와 Enumeration

-Enumeration은 컬렉션 프레임웍이 만들어지기 이전에 사용하던 것으로 Iterator의 구버전이라고 생각하면 된다.

-ListIterator는 Iterator를 상속받아서 기능을 추가한 것으로 컬렉션의 요소에 접근할 때 Iterator는 단방향으로만 이동할 수 있는 데 반해 ListIterator는 양방향으로의 이동이 가능하다. 다만 ArrayList나 LinkedList와 같이 List인터페이스를 구현한 컬렉션에서만 사용할 수 있다.

-ListIterator는 양방향으로 이동하기 때문에 각 요소간의 이동이 자유롭다. 다만 이동하기 전에 반드시 hasNext()나 hasPrevious()를 호출해서 이동할 수 있는지 확인해야한다.

-Iterator의 remove()는 단독으로 쓰일수 없고, next()와 같이 써야한다. 특정위치의 요소를 삭제하는것이 아니라 읽어 온 것을 삭제한다.

Arrays

-Arrays클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다.

1.배열의 복사

-copyOf():배열 전체를

  • copyOfRange():배열의 일부를 복사해서 새로운 배열을 만들어 반환

2.배열 채우기

-fill(): 배열의 모든 요소를 지정된 값으로 채운다.

  • setAll(): 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다.

3.배열의 정렬과 검색

-sort():배열을 정렬할때

-binarySearch():배열에 저장된 요소를 검색할때

4.배열의 비교와 출력

-equals():두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 false를 반환

-toString(): 모든 요소를 문자열로 편하게 출력할 수 있다.

-deepToString():다차원배열에서 사용

5.배열을 List로 변환

-asList(Object...a):배열을 List에 담아서 반환한다.(asList()가 반환한 List의 크기를 변경할 수 없다는 것이다.)

6.parallelXXX(), spliterator(),stream()

-parallel로 시작하는 이름의 메서드들이 있는데, 이 메서드들은 보다 빠른 결과를 얻기 위해 여러 쓰레드가 작업을 나누어 처리하도록 한다.

-spliterator()는 여러 쓰레드가 처리할 수 있게 하나의 작업을 여러 작업으로 나누는 spliterator를 반환한다.

-stream()은 컬렉션을 스트림으로 변환한다.

Comparator와 Comparable

-Comparator와 Comparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다.

-Comparable을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들, 주로 Integer와 같은 wrapper클래스와 String ,Date, File과 같은 것들이며 기본적으로 오름차순으로 정렬되도록 구현되어 있다.

1.Comparable: 기본정렬기준을 구현하는데 사용

2.Comparator: 기본정렬기준 외에 다른 기준으로 정렬하고자할 때 사용

HashSet

-HashSet은 Set인터페이스를 구현한 가장 대표적인 컬렉션이며, Set인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다.

-ArrayList와 같이 List인터페이스를 구현한 컬렉션과 달리 HashSet은 저장순서를 유지하지 않으므로 저장순서를 유지하고자 한다면, LinkedHashSet을 사용해야한다.

TreeSet

-TreeSet은 이진검색트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스이다.

-이진검색트리는 정렬, 검색, 범위검색에 높은 성능을 보이는 자료구조이며 TreeSet은 이진검색트리의 성능을 향상시킨 '레드-블랙 트리'로 구현되어 있다.

-중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지도 않는다.

profile
모든 업무 지식 작성하자!

0개의 댓글