컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의하고, collecion 인터페이스에는 iterator(iterator을 구현한 클래스의 인스턴스)를 반환하는 iterator()을 정의 하고 있다.
public interface Iterator{
boolean hasNext();
Object next();
void remove();
}
public interface Collection{
public Iterator iterator()
}
- boolean hasNext() =읽을 요소가 남아있는지 체크
- Object next() = 다음요소를 읽어온다./호출하기전 hasNext로 요소 있나 체크
- remove() = next()로 읽어온 요소삭제한다/ 반드시 next로 먼저 읽어와야한다(선택적 기능)
이런식으로 써주면 된다. ArrayList대신 Collection 인터페이스를 구현한 다른 컬렉션 클래스의 객체를 생성하도록 변경하기만 하면 된다.
list ,set =iterator (가능) Map=iterator(직접호출불가)
Map인터페이스는 iterator 사용 불가!
그 대신 keySet()이나 entrySet() 과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출해야 iterator()를 얻을 수 있다.
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() 로 읽어온 요소를 지정된 객체로 변경한다(선택적기능)
public void remove(){
throw new UnsupportedOperationException();
}
예외를 던져서 구현되지 않은 기능이라는 것을 메서드를 호출하는 쪽에 알리는 것이 좋다.
하지만 UnsupportedOperationException() 은 RuntimeException 자손( unchecked예외)이기 떄문에 따로 예외처리를 하지 않아도 된다(?)(이부분은 추후에 확인예정)
흠..iterator 은 크게 메서드를 통해서 사용하는 방법과 구현해서 사용하는 방법 두가지가 있는것같다... 확실하지 않아서 좀더 알아봐야겠다.
-copyOf(a,b) = a배열의 b까지(index) (마지막 포함x)
-copyRange(a,2,4) =a배열의 2~4(index) (마지막 포함x)
-fill(a,9) = 배열 a를 9로 채운다
-setAll(a, 람다 or 함수형 인터페이스) =배열 a를 람다식에 맞춰 채운다
-sort(a) =배열 a를 정렬한다
-binarySearch(a,2)= 정렬된 배열a의 index=2 값
1.순차검색은 첫 번쨰 요소부터 하나씩 검색하는 방법이다. 배열이 정렬되어 있을 필요는 없지만 하나씩 비교하느라 시간이 오래걸린다.
2.이진검색은 배열 범위를 반복적으로 절반씩 줄여가며 하기떄문에 검색은 빠르지만 배열이 정렬되어 있어야한다.
-toString() /deepTo String()
-equals() '
toString= 모든 배열 문자열로 출력 / deepTo String()= 다차원
equals()=배열에 저장된 모든요소를 비교한다/T/F
asList(Object...a)
배열을 List에 담아서 반환한다. 하지만 이렇게 생성된 list는 크기를 변경 할수 없다 즉 추가 삭제가 불가능 하다. 저장된 내용은 변경 가능하다.
매개 변수의 타입이 가변인수라 배열 생성 없이 저장할 요소들만 나열하는 것도 가능하다.
변경가능하게 하고싶으면
List list=new ArrayList(Arrays.asList(1,2,3,4,5);