JAVA

set 인터페이스

Stater 2019. 10. 10. 09:00

 

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