한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지_패스트 캠퍼스 챌린지 27일차

2021. 10. 2. 15:16IT공부/Java&Spring 이용한 웹프로그래밍

11. Collection 요소를 순회하는 Iterator

요소의 순회란?

  • 컬렉션 프레임워크에 저장된 요소들을 하나씩 차례로 참조하는것
  • 순서가 있는 List인터페이스의 경우는 Iterator를 사용 하지 않고 get(i) 메서드를 활용할 수 있음
  • Set 인터페이스의 경우 get(i) 메서드가 제공되지 않으므로 Iterator를 활용하여 객체를 순회함

Iterator 사용하기

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

MemberArrayList.java 의 removeMember() 메서드를 Iterator를 활용하여 구현

public boolean removeMember(int memberId){ // 멤버 아이디를 매개변수로, 삭제 여부를 반환

       Iterator<Member> ir = arrayList.iterator();

       while(ir.hasNext()) {

            Member member = ir.next();

            int tempId = member.getMemberId();

              if(tempId == memberId){ // 멤버아이디가 매개변수와 일치하면

              arrayList.remove(member); // 해당 멤버를 삭제

              return true; // true 반환

              }

       }

        System.out.println(memberId + "가 존재하지 않습니다"); //for 가 끝날때 까지 return 이 안된경우

        return false;

}

-> Iterator 는 자동으로 Index 를 관리해주기 때문에, 사용에 편리함이 있다고 생각했지만

Iterator 를 더 자세히 보면 객체를 만들어 사용하기 때문에 느릴수 밖에 없다고 생각합니다.

 

12.  Set 인터페이스를 구현한 클래스

HashSet 클래스

  • Set 인터페이스를 구현한 클래스와
  • 멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 함
  • 동일성 구현을 위해 필요에 따라 equals()와 hashCode()메서드를 재정의함

HashSetTest.java

public class HashSetTest {

           public static void main(String[] args) {

 

              HashSet<String> hashSet = new HashSet<String>();

              hashSet.add(new String("김유신"));

              hashSet.add(new String("이순신"));

              hashSet.add(new String("홍연의"));

              hashSet.add(new String("강감찬"));

              hashSet.add(new String("강감찬"));

              System.out.println(hashSet);

            }

}

MemberHashSet.java

public class MemberHashSet {

              private HashSet<Member> hashSet;

              public MemberHashSet(){

                  hashSet = new HashSet<Member>();

             }

             public void addMember(Member member){

               hashSet.add(member);

            }

            public boolean removeMember(int memberId){

                Iterator<Member> ir = hashSet.iterator();

                while( ir.hasNext()){

                     Member member = ir.next();

                     int tempId = member.getMemberId();

                     if( tempId == memberId){

                         hashSet.remove(member);

                          return true;

                      }

                 }

               System.out.println(memberId + "가 존재하지 않습니다");

               return false;

      }

      public void showAllMember(){

               for(Member member : hashSet){

                   System.out.println(member);

               }

               System.out.println();

         }

}

 

MemberHashSetTest.java

public class MemberHashSetTest {

         public static void main(String[] args) {

             MemberHashSet memberHashSet = new MemberHashSet();

                 Member memberLee = new Member(1001, "이순신");

                 Member memberKim = new Member(1002, "김유신");

                 Member memberKang = new Member(1003, "강감찬");

               

                 memberHashSet.addMember(memberLee);

                 memberHashSet.addMember(memberKim);

                  memberHashSet.addMember(memberKang);

                 memberHashSet.showAllMember();

 

                    Member memberHong = new Member(1003, "홍길동"); //1003 아이디 중복                                                        memberHashSet.addMember(memberHong);

                   memberHashSet.showAllMember();

              }

}

  • 아이디가 동일한 경우 같은 멤버이므로 중복되지 않도록 Member 클래스의 equals()와 hashCode()메서드를 재정의 해야 합니다

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

강의에 대해 정확하게 알고 싶다면 

https://bit.ly/37BpXiC