Iterator/Arrays

Shaun·2021년 8월 10일
0

JAVA

목록 보기
8/30

Iterator vs Iterator()

컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, collecion 인터페이스에는 iterator(iterator을 구현한 클래스의 인스턴스)를 반환하는 iterator()을 정의 하고 있다.

public interface Iterator{
boolean hasNext();
Object next();
void remove();
}

public interface Collection{
public Iterator iterator()
}

  • Iterator()Collection인터페이스에 정의된 인터페이스이므로 Collection 인터페이스의 자손인 list와 set에도 포함되어 있다.
  • iterator는 일회용이다.

iterator 메서드

  • boolean hasNext() =읽을 요소가 남아있는지 체크
  • Object next() = 다음요소를 읽어온다./호출하기전 hasNext로 요소 있나 체크
  • remove() = next()로 읽어온 요소삭제한다/ 반드시 next로 먼저 읽어와야한다(선택적 기능)

이런식으로 써주면 된다. ArrayList대신 Collection 인터페이스를 구현한 다른 컬렉션 클래스의 객체를 생성하도록 변경하기만 하면 된다.

list ,set =iterator (가능) Map=iterator(직접호출불가)

Map인터페이스는 iterator 사용 불가!
그 대신 keySet()이나 entrySet() 과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 iterator()를 얻을 수 있다.

ListIterator 와 Enumeration

1.Enumeration은 iterator의 구버전이라 생각하면 된다.

2.ListIterator은 iterator를 상속받아서 기능을 추가한것 이므로, 컬렉션 요소 접근시 iterator은 단방향/ Listiterator은 양방향으로 이동 가능하다.

기존 iterator 메서드 +추가 메서드
-boolean hasPrevious() =읽어올 이전요소 있는지 확인
-Object previous() = 이전요소를 읽어온다.
-int previousIndex() =이전 요소 index반환
-int nextIndex()= 다음 요소의 index 반환
-void add() = 새로운 객체 추가 (선택적기능)
-void remove =next() 또는 previous() 읽어온 요소를 삭제한다(선택적기능)
-void set = next() 또는 previous() 로 읽어온 요소를 지정된 객체로 변경한다(선택적기능)

선택적기능

  • 메서드들 중에 선택적기능 이라고 표시된것들은 반드시 구현하지 않아도 된다.
    예를들어 remove()는 구현하지 않아도 괜찮지만 추상메서드라 메서드의 몸통은 만들어주어야 한다.

public void remove(){
throw new UnsupportedOperationException();
}

예외를 던져서 구현되지 않은 기능이라는 것을 메서드를 호출하는 쪽에 알리는 것이 좋다.

하지만 UnsupportedOperationException() 은 RuntimeException 자손( unchecked예외)이기 떄문에 따로 예외처리를 하지 않아도 된다(?)(이부분은 추후에 확인예정)

흠..iterator 은 크게 메서드를 통해서 사용하는 방법과 구현해서 사용하는 방법 두가지가 있는것같다... 확실하지 않아서 좀더 알아봐야겠다.

Arrays

1.배열의 복사

-copyOf(a,b) = a배열의 b까지(index) (마지막 포함x)
-copyRange(a,2,4) =a배열의 2~4(index) (마지막 포함x)

2.배열 채우기

-fill(a,9) = 배열 a를 9로 채운다
-setAll(a, 람다 or 함수형 인터페이스) =배열 a를 람다식에 맞춰 채운다

3.배열의 정렬과 검색

-sort(a) =배열 a를 정렬한다
-binarySearch(a,2)= 정렬된 배열a의 index=2 값

  • sort 는 배열을 정렬 할떄
  • binarySearch는 정렬된 배열을 검색할떄 사용한다. 그리고 일치하는 요소가 여러 개 있으면 어떤게 반환될지는 모른다.

순차검색 vs 이진 검색(binarySearch)

1.순차검색은 첫 번쨰 요소부터 하나씩 검색하는 방법이다. 배열이 정렬되어 있을 필요는 없지만 하나씩 비교하느라 시간이 오래걸린다.

2.이진검색은 배열 범위를 반복적으로 절반씩 줄여가며 하기떄문에 검색은 빠르지만 배열이 정렬되어 있어야한다.

4.배열의 비교와 출력

-toString() /deepTo String()
-equals() '

toString= 모든 배열 문자열로 출력 / deepTo String()= 다차원
equals()=배열에 저장된 모든요소를 비교한다/T/F

5.배열을 List로 변환

asList(Object...a)

  • 배열을 List에 담아서 반환한다. 하지만 이렇게 생성된 list는 크기를 변경 할수 없다 즉 추가 삭제가 불가능 하다. 저장된 내용은 변경 가능하다.

  • 매개 변수의 타입이 가변인수라 배열 생성 없이 저장할 요소들만 나열하는 것도 가능하다.

  • 변경가능하게 하고싶으면

  • List list=new ArrayList(Arrays.asList(1,2,3,4,5);
profile
호주쉐프에서 개발자까지..

0개의 댓글