본문 바로가기

JAVA

[Java] 6-2강 - Collection Framework 2 (Iterator, Arrays, Comparable)

2. Iterator

Collection에서 data를 읽어들이는 방법을 제공

1) Collection 내부 구조

iterator라는 메소드로 Collection을 Iterator로 만들 수 있습니다.

 

2) Method

remove : 최근에 Iterator에서 return한 element를 제거

 

1> example 1

list는 List의 메소드만 사용이 가능합니다.

 

3) ListIterator

1> 특징

Iterator의 subclass

(뒤로만 갈 수 있었던 Iterator와 달리) 앞뒤로 왔다갔다하는 것이 가능합니다.

List interface를 implement한 class에만 사용 가능

2> Method

 

3. Arrays

array와 관련된 기능들을 제공합니다.

1) array 관련 기능

1> copyOf, copyOfRange

copyOf(arr, length) : arr를 처음부터 length개만큼을 복사(return)한다.

copyOfRange(arr, start, end) : arr를 start부터 end미만을 복사(return)한다.

2> fill, setAll

fill(arr, value) : arr의 모든 원소를 value로 채운다.

setAll(arr, function) : arr의 모든 원소를 function을 통해 채운다.

3> sort, binarySearch

sort(arr) : arr 내부를 오름차순으로 정렬

binarySearch(arr, value) : (arr이 정렬되어 있어야한다.)arr 내부에 value가 있는지 탐색하여 index를 알려(return)준다.

4> toString, deepToString

toString(arr) : arr을 string으로 만들어줍니다. 

deepToString(arr) : 2D 이상의 arr을 string으로 만들어줍니다.

5> equals, deepEquals

equal(arr1, arr2) : arr1과 arr2가 같은지

deepEquals(arr1, arr2) : 2D 이상의 arr1과 arr2가 같은지

 

4. Comparable and Comparator

sort 메소드는 int나 float은 잘 정렬할 수 있지만, 정렬하지 못하는 object도 있습니다.

정렬하려면 element들이 comparable해야 합니다.

=> array의 element가 interface Comparable<T>를 implement해야 합니다.

ex> Integer라는 class는 Comparable<T>를 implement해서 정렬이 가능합니다.

 

1) comparable

1> Integer는 Comparable<Integer>를 implement했습니다.

(특히 Comparable interface의 compareTo를 정의했습니다.)

- 오름차순 : instance가 parameter보다 클 때, 1을 return해야 한다. (작으면 -1, 같으면 0을 return하기)

2> 2개 요소를 비교하는 예시

[1] instance의 salary가 작을 때 1을 return

-> 내림차순 정렬 -> salary가 작은 순으로 나열

[2] (만약 salary가 같다면) string의 알파벳 순으로 나열

 

2) Comparator 

단순히 오름차순 혹은 내림차순이 아니라 우리가 원하는대로 순서를 정하고 싶을 때 Comparator를 implement

1> 내림차순 혹은 오름차순의 순서를 반대로 하고 싶은 경우

[1] Comparator<T>를 implement -> compare(T o1, T o2)를 구현

[2] o1과 o2가 Comparable의 instance인지 확인하고

[3] c1과 c2라는 Comparable로 형변환한다. (compareTo 함수를 사용하기 위해서)

[4] compareTo 함수를 사용하고 -1을 곱한다. (-1을 곱해서 order를 뒤집는다.)

 

2> 대소문자 구분을 하지 않는 방법