[JAVA][패스트캠퍼스]컬렉션 프레임워크_Map 인터페이스

36317 단어 JavafastcampusJava

Map 인터페이스

  • key-value pair의 객체를 관리하는데 필요한 메서드가 정의됨
  • key는 중복 될 수 없음
  • 검색을 위한 자료구조
  • key를 이용하여 값을 저장하거나 검색, 삭제 할때 사용하면 편리함
    - 내부적으로 hash방식으로 구현함

    index = hash(key) // index는 저장위치

  • key가 되는 객체는 객체의 유일성함의 여부를 알기 위해 equals()와 hashCode()메서드를 재정의함

HashMap 클래스

  • Map 인터페이스를 구현한 클래스 중 가장 일반적으로사용하는 클래스
  • HashTable 클래스는 자바2부터 제공된 클래스로 Vector처럼 동기화를 제공함
  • pair 자료를 쉽고 빠르게 관리할 수 있음

Member.java

package collection.hashmap;

public class Member {

	private int memberId;
	private String memberName;
	
	public Member() {}
	public Member(int memberId,String memberName) {
		this.memberId=memberId;
		this.memberName=memberName;
	}
	public int getMemberId() {
		return memberId;
	}
	public void setMemberId(int memberId) {
		this.memberId = memberId;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	
	public String toString() {
		return memberName+"회원님의 아이디는"+  memberId+"입니다.";
	}
	
	@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;
	}
	
}

MemberHashMap.java

package collection.hashmap;

import java.util.HashMap;
import java.util.Iterator;

public class MemberHashMap {

	private HashMap<Integer,Member> hashMap;
	
	public MemberHashMap() {
		hashMap=new HashMap<Integer, Member>();
	}
	//집어넣을때는 put, 꺼내쓸때는 get
	//모든 키값을 가져올때는 keyset()의 Set반환
	//모든 콜렉션을 가져올때는 collection해서 values반환
	public void addMember(Member member) {
		hashMap.put(member.getMemberId(), member);
	}
	
	public boolean removeMember(int memberId) {
		if(hashMap.containsKey(memberId)) {
			hashMap.remove(memberId);
			return true;
		}
		System.out.println("회원 번호가 없습니다.");
		return false;
		
	}
	public void showAllMember() {
		
		Iterator<Integer> ir=hashMap.keySet().iterator();
		while(ir.hasNext()) {
			int key=ir.next();
			Member member=hashMap.get(key);
			System.out.println(member);
		}
		System.out.println();
	}
}

MemberHashMapTest.java

package collection.hashmap;
public class MemberHashMapTest {
	//HashSet의 결과를 출력할 때 중복되지 않은 값을 허용하게 하려면 hashcode와 equals를 재정의해야한다. 
	//Member클래스에서 재정의하지 않으면 중복된값이 출력됨
	
	public static void main(String[] args) {
		MemberHashMap manager=new MemberHashMap();
		
		Member memberLee= new Member(100,"Lee");
		Member memberKim= new Member(200,"Kim");
		Member memberPark= new Member(300,"Park");
		Member memberPark2= new Member(300,"Park");
		
		
		manager.addMember(memberLee);
		manager.addMember(memberKim);
		manager.addMember(memberPark);
		manager.addMember(memberPark2);
		manager.showAllMember();
		manager.removeMember(200);
		manager.showAllMember();
		
	}
}

TreeMap 클래스

  • key객체를 정렬하여 key-value를 pair로 관리하는 클래스
  • key에 사용되는 클래스에 Comparable, Comparator 인터페이스를 구현
  • java에 많은 클래스들은 이미 Comparable이 구현되어 있음
  • 구현된 클래스를 key로 사용하는 경우는 구현할 필요 없음

Member.java

package collection.treemap;

public class Member {

	private int memberId;
	private String memberName;
	
	public Member() {}
	public Member(int memberId,String memberName) {
		this.memberId=memberId;
		this.memberName=memberName;
	}
	public int getMemberId() {
		return memberId;
	}
	public void setMemberId(int memberId) {
		this.memberId = memberId;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	
	public String toString() {
		return memberName+"회원님의 아이디는"+  memberId+"입니다.";
	}
	
	@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;
	}
	
	
	
}

MemberTreeMap.java

package collection.treemap;

import java.util.Iterator;
import java.util.TreeMap;
public class MemberTreeMap {

	private TreeMap<Integer,Member> treeMap;
	
	public MemberTreeMap() {
		treeMap=new TreeMap<Integer,Member>();
	}
	
	public void addMember(Member member) {
		treeMap.put(member.getMemberId(),member);
	}
	
	public boolean removeMember(int memberId) {
		if(treeMap.containsKey(memberId)) {
			treeMap.remove(memberId);
			return true;
		}
		System.out.println("회원 번호가 없습니다.");
		return false;
	}
	
	public void showAllMember() {
		Iterator<Integer> ir=treeMap.keySet().iterator();
		while(ir.hasNext()) {
			int key=ir.next();
			Member member=treeMap.get(key);
			System.out.println(member);
		}
		System.out.println();
	}

	
}

MemberTreeMapTest.java

package collection.treemap;

public class MemberTreeMapTest {

	//정렬의 잘 되는 이유는 MemberTreeMap의 키값이 Integer이기 때문임
	//Integer에 이미 Comparable이 구현되어 있기 때문에 굳이 정렬을 구현하지 않아도됨
	public static void main(String[] args) {
		MemberTreeMap manager=new MemberTreeMap();
		
		Member memberPark= new Member(300,"Park");		
		Member memberLee= new Member(100,"Lee");
		Member memberKim= new Member(200,"Kim");
		Member memberPark2= new Member(400,"Park");
		
		
		manager.addMember(memberLee);
		manager.addMember(memberKim);
		manager.addMember(memberPark);
		manager.addMember(memberPark2);
		
		manager.showAllMember();
		
		manager.removeMember(200);
		manager.showAllMember();
		
	
		
	}
}

좋은 웹페이지 즐겨찾기