Iterator로 순회하기
Collection의 개체를 순회하는 인터페이스
-iterator() 메서드 호출
Iterator ir = memberArrayList.iterator();
-List는 순서기반의 인터페이스이지만, Set은 순서가 없음( 실행시에 계속해서 순서가 바뀜)
-get(i)메서드가 제공되지 않아서 Iterator를 사용해서 순회하여 검색해야한다.
-저장된 순서와 출력순서가 다를 수 있음
-아이디와 주민번호 사번 등 유일한 값이나 객체를 관리할 때 사용
-HashSet, TreeSet 클래스
Iterator 에 선언된 메서드
메서드 | 설명 |
boolean hasNext() | 이후에 요소가 더 있는지 체크하는 메서드이며, 요소가 더 있다면 true를 반환합니다. |
E next() | 다음에 있는 요소를 반환합니다. |
HashSet을 사용하는 경우에는 관리하는 오브젝트가 논리적으로 값들의 중복에 따른 논리적인 처리가 되어 있는지 꼭 확인해야한다.
HashSet의 경우에는 중복을 허용하지 않기 떄문이다.
===========================================================================================
package set;
import java.util.HashSet;
import java.util.Iterator;
//HashSet을 통한 Member관리
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();
if(member.getMemberId()==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();
}
}
============================================================================================
package set;
public class MemberHashSetTest {
public static void main(String[] args) {
MemberHashSet manager = new MemberHashSet();
Member memberLee = new Member(100,"LEE");
Member memberKim = new Member(200,"Kim");
//아이디가 같은 경우
Member memberPark = new Member(300,"Park");
Member memberPark2 = new Member(300,"Park2");
//전체
manager.addMember(memberLee);
manager.addMember(memberKim);
manager.addMember(memberPark);
manager.addMember(memberPark2);
//전체추가후
manager.showAllMember();
//제거
manager.removeMember(100);
//제거후
manager.showAllMember();
}
}
============================================================================================
package set;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("이순신");
set.add("김유신");
set.add("강감찬");
set.add("이순신");
//순서대로 출력되는 것은 아니다. 내부적으로 관리하는 것이 Hash방식이다.
//HashSet-중복이 허용 안된다, 순서대로 출력도 안된다.
//아이디학번 등을 사용할때 사용하면 좋다.
System.out.println(set);
//HashSet의경우에는 Iterator 을 사용하여 순회하는 경우 아래와 같이사용.
Iterator<String> ir = set.iterator();
while(ir.hasNext()) {
String str=ir.next();//반환값은 스트링
System.out.println(str);
}
ArrayList<String> set1 = new ArrayList<String>();
set1.add("이순신");
set1.add("김유신");
set1.add("강감찬");
set1.add("이순신");
//ArrayList를 사용하면 순서대로 출력이 가능 중복허용
//ArrayList-중복허용
System.out.println(set1);
}
}
=============================================================================================
package set;
public class Member {
private int memberId;
private String memeberName;
public Member() {}
@Override
public int hashCode() {
return memberId;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member member = (Member)obj;
return (this.memberId==member.memberId);
}
return false;
}
public Member(int memberId,String memberName) {
this.memberId=memberId;
this.memeberName=memberName;
}
public int getMemberId() {
return memberId;
}
public void setMemberId(int memberId) {
this.memberId = memberId;
}
public String getMemeberName() {
return memeberName;
}
public void setMemeberName(String memeberName) {
this.memeberName = memeberName;
}
public String toString() {
return memeberName +"회원님의 아이디는 "+memberId+"입니다.";
}
}
TreeSet클래스
- 객체의 정렬에 사용되는 클래스
- 중복을 허용하지 않으면서 오름차순이나 내림차순으로 객체를 정렬함
- 내부적으로 이진 검색 트리(binary search tree) 로 구현되어 있음
- 이진 검색트리에 자료가 저장 될 때 비교하여 저장될 위치를 정함
- 객체 비교를 위해 Comparable이나 Comparator 인터페이스를 구현 해야함
package treeset;
import java.lang.constant.Constable;
import java.lang.constant.ConstantDesc;
import java.util.TreeSet;
import jdk.internal.vm.annotation.Stable;
public class TreeSetTest {
public static void main(String[] args) {
// public final class String
// implements java.io.Serializable, Comparable<String>, CharSequence,
// Constable, ConstantDesc {
//
// /**
// * The value is used for character storage.
// *
// * @implNote This field is trusted by the VM, and is a subject to
// * constant folding if String instance is constant. Overwriting this
// * field after construction will cause problems.
// *
// * Additionally, it is marked with {@link Stable} to trust the contents
// * of the array. No other facility in JDK provides this functionality (yet).
// * {@link Stable} is safe here, because value is never null.
// */
// @Stable
// private final byte[] value;
//
// /**
// * The identifier of the encoding used to encode the bytes in
// * {@code value}. The supported values in this implementation are
// *
// * LATIN1
// * UTF16
// *
// * @implNote This field is trusted by the VM, and is a subject to
// * constant folding if String instance is constant. Overwriting this
// * field after construction will cause problems.
// */
//Comparable인터페이스가 오름차순으로 구현하게끔 되어 있다.
TreeSet<String> treeSet = new TreeSet<String>();
treeSet.add("홍길동");
treeSet.add("강감찬");
treeSet.add("이순신");
for(String str:treeSet) {
System.out.println(str);
}
}
}
반응형
'JAVA' 카테고리의 다른 글
Map인터페이스 (2) | 2019.10.12 |
---|---|
Comparable 인터페이스와 Comparator 인터페이스 (0) | 2019.10.11 |
Stack과 Queue (0) | 2019.10.09 |
List 인터페이스 (0) | 2019.10.08 |
제네릭 (0) | 2019.10.07 |