Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Super Coding Addict

Ch11. 컬렉션 프레임워크 (6) 본문

JAVA 문법

Ch11. 컬렉션 프레임워크 (6)

밍응애 2021. 2. 27. 21:10

< Map 인터페이스 >

* Map 인터페이스

- key-value쌍의 객체를 관리하는 데 필요한 메서드가 정의 됨

- key는 중복될 수 없다

- key를 이용하여 값을 저장 / 검색 / 삭제

- 내부적으로 hash 방식으로 구현 됨 ( index = hash(key)    //index는 저장 위치)

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

 

* HashMap 클래스

- Map 인터페이스를 구현한 클래스 중 가장 일반적으로 사용

- HashTable 클래스는 자바2부터 제공된 클래스로 Vector처럼 동기화를 제공

- pair 자료를 쉽고 빠르게 관리 가능

 

 

* TreeMap 클래스

- key로 정렬이 됨

=> Key를 Comparable이나 Comparator 인터페이스로 구현해야 함

- Java의 많은 클래스들이 이미 Comparable이 구현되어 있으므로 이런 경우 구현할 필요는 x

 

 

- HashMap 예제

# Member 클래스

package ch11.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 클래스

package ch11.hashmap;

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

public class MemberHashMap {
	
	private HashMap<Integer, Member> hashMap;
	
	public MemberHashMap() {
		hashMap = new HashMap<Integer, Member>();
	}
	
	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() {
		//hashMap.keySet(); //중복 X므로 Set으로 반환됨 cf. values()는 collection으로
		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();
	}
}

--> Map은 add가 아니라 put으로 추가

--> containsKey()메서드로 해당 key의 값을 가지고 있는 지 알 수 있음

--> remove로 해당 key와 값 제거

--> keySet()과 valeus()메서드로 각각 키와 값을 모두 뽑을 수 있고, 그 다음 iterator()메서드로 돌려서 Iterator로 받아옴

(key는 중복X므로 keySet()의 반환 값은 Set, values는 중복가능하므로 반환 값은 collection)

 

# MemberHashMapTest 클래스

package ch11.hashmap;

public class MemberHashMapTest {

	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, "Park2");
	
	manager.addMember(memberLee);
	manager.addMember(memberKim);
	manager.addMember(memberPark);
	manager.addMember(memberPark2);
	
	manager.showAllMember();
	
	manager.removeMember(200);
	manager.showAllMember();
	
	}

}

--> Park과 Park2는 Key가 300으로 동일하므로 300-Park2 쌍은 중복되어 HashMap에 들어가지 않음

 

- TreeMap 예제

# Member 클래스

package ch11.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 클래스

package ch11.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

package ch11.treemap;

public class MemberTreeMapTest {

	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, "Park2");
	
	manager.addMember(memberLee);
	manager.addMember(memberKim);
	manager.addMember(memberPark);
	manager.addMember(memberPark2);
	
	manager.showAllMember();
	
	manager.removeMember(200);
	manager.showAllMember();
	
	}

}

 

--> Key를 300, 100, 200, 400 순으로 넣었으나 100, 200, 300, 400으로 자동으로 정렬됨

--> TreeMap의 Key가 Integer형으로 JDK에서 Comparable을 이미 구현하고 있기 때문

'JAVA 문법' 카테고리의 다른 글

Ch12. 내부 클래스(2)  (0) 2021.02.27
Ch12. 내부 클래스(1)  (0) 2021.02.27
Ch11. 컬렉션 프레임워크 (5)  (0) 2021.02.25
Ch11. 컬렉션 프레임워크 (4)  (0) 2021.02.24
Ch11. 컬렉션 프레임워크 (3)  (0) 2021.02.22