모든지 기록하자!

[Java] Iterator 본문

Java

[Java] Iterator

홍크 2021. 5. 25. 00:13
728x90

순서가 없는 Set 인터페이스를 구현한 경우에는 get(i) 메서드를 사용할 수 없다. 

Iterator는 Collection 인터페이스를 구현한 객체에서 미리 정의되어있는 iterator() 메서드를 호출하여 참조한다. 

Iterator ir = memberArrayList.iterator();

 

Iterator를 사용하여 요소를 순회할 때 사용하는 메서드

메서드 설명
boolean hasNext() 이후에 요소가 더 있는지를 체크하는 메서드, 요소가 있다면 true를 반환한다.
E next() 다음에 있는 요소를 반환한다.

 

MemberArrayList 클래스의 removeMember() 메서드를 수정해 보자 

 

원본

	public boolean removeMember(int memberId) {
		
			for(int i = 0; i < arrayList.size(); i++) {
			Member member = arrayList.get(i);
			int tempId = member.getMemberId();
			if(memberId == tempId) { //매개변수로 넘어온 아이디랑 템프아이디가
				arrayList.remove(i); //동일할경우 arrayList에 i번째를 삭제
				return true;
			}
		}

 

Iterator를 사용

	public boolean removeMember(int memberId) {
		
		// Iterator은 Collection의 개체를 순회하는 인터페이스
		// HashSet은 중복을 허용하지않고 get메서드가 없어서(i번째 꺼내오지못함) 
		//순회하는 Iterator 사용, Hash방식은 순서가 상관없음
		Iterator<Member> iterator = arrayList.iterator();
		while(iterator.hasNext()) { //hasNext는 다음에 가져올 엘리먼트가 있는지 확인
			Member member = iterator.next(); // 순회한 값을 member에 대입
			
			int tempId = member.getMemberId(); 
			if(memberId == tempId) { // 회원 아이디가 매개변수와 일치하면 해당 회원삭제
				arrayList.remove(member);
				//remove메서드는 index를 지정해 지울수도있고 Object 자체를 지울수도있음
				return true;
		}
		}
728x90
Comments