Map 인터페이스
쌍으로 구현된 쌍의 자료구조 이다.
Key와 value 를 가지고 있는데 key는 유일해야 한다. 자료를 쌍으로 pari 로 관리할 때 종종 있다. 이해하고 활용해볼수있다.
Map 인터페이스
검색을 위한 자료구조 , key을 이용하여 값을 저장하거나 검색 , 삭제 할 때 사용하면 편리하다.
내부적으로 hash 방식으로 구현된다.
Index = hash(key) // index 는 저장위치
Key가 되는 객체는 객체의 유일성함의 여부를 알기 위해 equals() 와 hashCode() 메소드를 재정의 해야 한다.
HashMap 클래스
Map 인터페이스를 구현한 클래스 중 가장 일반적으로 사용하는 클래스
HashTable 클래스는 자바 2 부터 제공된 클래스로 Vector 처럼 동기화를 제공한다.
Pair 자료를 쉽고 빠르게 관리할수있다.
TreeMap 클래스 TreeSet과 비슷하게 인터페이스를 구현해야된다.
key객체를 정렬하여 key-value 를 pair 로 관리하는 클래스이다.
Key에 사용되는 클래스에 Comparable , Comparator 인터페이스를 구현한다
Java에 많은 클래스들은 이미 Comparable 이 구현되어 있다
구현된 클래스를 key로 사용하는 경우는 구현할 필요가 없다.
Member 클래스
package 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 + "입니다.";
}
}
MemberHashMap 클래스
map 에서 값을 넣을때는 put 사용 , 삭제할때는 remove
그전에 삭제하기전에 키값이 containsKey 포함하고 있는지 있으면 키값으로 삭제할수있다.
순회할때는 키값으로 돌리던가 values값으로 돌리던가 하나로 해야한다.
Iterator<Integer> = hashMapkeySet().iterator(); 반환값은 Iterator 객체가 key로 순환한다.
package hashmap;
import java.util.HashMap;
import java.util.Iterator;
public class MemberHashMap {
private HashMap<Integer, Member> hashMap; // key는 회원번호 값은 멤버
public MemberHashMap() {
hashMap = new HashMap<Integer,Member>();
}
public void addMember(Member member) { // 집어넣을때 멤버변수가 넘어온다.
hashMap.put(member.getMemberID(), member);
// 멤버의 아이디와 넘어온 멤버를 넣는다.
}
public boolean removeMember(int memberID) { // 이 key값이 Integer로 int로 변환이 됨
// 이 key값이 hashMap 안에 있는지 여부를 본다
if(hashMap.containsKey(memberID)) { // 키값이 포함되어 있는지
hashMap.remove(memberID); // 있으면 키값으로 지울수있다.
return true;
} else {
System.out.println("회원 번호가 없습니다. ");
return false;
}
}
public void showAllMember() {
// 키하고 값을 동시에 순회할수없다. 키를 가지고 순회하던가 값을 가지고 순회하던가
Iterator<Integer> ir = hashMap.keySet().iterator(); // 모든 key객체를 반환해준다. set<k> 타입으로 반환된다. Iterator 객체가 key 로 순환한다.
// <Integer> 인티저로 순회한다.
// hashMap.values().iterator(); 모든 value 애들을 반환해주는데 중복될수도 있으니 Collection<V>으로 반환함
while(ir.hasNext()) {
int key = ir.next();
Member member = hashMap.get(key); // get으로 키를 주면 멤버가 반환이 된다.
System.out.println(member);
}
System.out.println("");
}
}
package hashmap;
public class MemberHashMapTest {
public static void main(String[] args) {
MemberHashMap manager = new MemberHashMap();
// TreeSet 회원의 아이디 순서대로 정렬을 하고 싶다면 ?
Member memberLee = new Member(100,"이효리");
Member memberKim = new Member(200,"강감찬");
Member memberPark = new Member(300,"박범");
Member memberPark2 = new Member(300,"박범");
manager.addMember(memberLee);
manager.addMember(memberKim);
manager.addMember(memberPark);
manager.addMember(memberPark2); // member가 key값으로 되어있어서
// 이미 equals랑 hashCode가 이미구현되어있어서 intValue가 같으면 같은거라고해서 안들어감
manager.showAllMember();
manager.removeMember(200);
manager.showAllMember(); // 200 삭제
}
}
이미 map은 equals 랑 hashCode가 상위클래스에서 구현되어 있다.
TreeMap은
package 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 + "입니다.";
}
}
package treemap;
import java.util.Iterator;
import java.util.TreeMap;
public class MemberTreeMap {
private TreeMap<Integer, Member> treeMap; // key는 회원번호 값은 멤버
// Integer는 이미 Comparable 이 구현되어있다.
public MemberTreeMap() {
treeMap = new TreeMap<Integer,Member>();
}
public void addMember(Member member) { // 집어넣을때 멤버변수가 넘어온다.
treeMap.put(member.getMemberID(), member);
// 멤버의 아이디와 넘어온 멤버를 넣는다.
}
public boolean removeMember(int memberID) { // 이 key값이 Integer로 int로 변환이 됨
// 이 key값이 hashMap 안에 있는지 여부를 본다
if(treeMap.containsKey(memberID)) { // 키값이 포함되어 있는지
treeMap.remove(memberID); // 있으면 키값으로 지울수있다.
return true;
} else {
System.out.println("회원 번호가 없습니다. ");
return false;
}
}
public void showAllMember() {
// 키하고 값을 동시에 순회할수없다. 키를 가지고 순회하던가 값을 가지고 순회하던가
Iterator<Integer> ir = treeMap.keySet().iterator(); // 모든 key객체를 반환해준다. set<k> 타입으로 반환된다. Iterator 객체가 key 로 순환한다.
// <Integer> 인티저로 순회한다.
// hashMap.values().iterator(); 모든 value 애들을 반환해주는데 중복될수도 있으니 Collection<V>으로 반환함
while(ir.hasNext()) {
int key = ir.next();
Member member = treeMap.get(key); // get으로 키를 주면 멤버가 반환이 된다.
System.out.println(member);
}
System.out.println("");
}
}
package treemap;
public class MemberTreeMapTest {
public static void main(String[] args) {
MemberTreeMap manager = new MemberTreeMap();
// TreeSet 회원의 아이디 순서대로 정렬을 하고 싶다면 ?
Member memberPark = new Member(300,"박범");
Member memberLee = new Member(100,"이효리");
Member memberKim = new Member(200,"강감찬");
Member memberPark2 = new Member(400,"세세");
manager.addMember(memberLee);
manager.addMember(memberKim);
manager.addMember(memberPark);
manager.addMember(memberPark2); // member가 key값으로 되어있어서
// 이미 equals랑 hashCode가 이미구현되어있어서 intValue가 같으면 같은거라고해서 안들어감
manager.showAllMember();
manager.removeMember(200);
manager.showAllMember(); // 200 삭제
}
}
'JAVA Programming' 카테고리의 다른 글
[71] 내부클래스 외부클래스 <인스턴스 내부클래스 , 정적 내부클래스 (0) | 2020.07.20 |
---|---|
[70] 컬렉션 프레임워크 요약정리 (0) | 2020.07.20 |
[68] HashSet 으로 관리해보기 (0) | 2020.07.20 |
[67] TreeSet 자료구조로 구현하기 (오름차순,내림차순,중복X) Comparator상속받을때 (0) | 2020.07.20 |
[66] TreeSet 자료구조로 구현하기 (오름차순,내림차순,중복X) Comparable 상속받을때 (0) | 2020.07.20 |