Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jpa
- transaction
- 스프링 핵심 원리
- java
- Android
- 백준
- 그리디
- JPQL
- 인프런
- http
- Servlet
- JDBC
- springdatajpa
- AOP
- 스프링 핵심 기능
- Greedy
- Proxy
- spring
- db
- 자바
- 스프링
- QueryDSL
- kotlin
- 알고리즘
- 김영한
- Exception
- SpringBoot
- pointcut
- Thymeleaf
- Spring Boot
Archives
- Today
- Total
개발자되기 프로젝트
Pair로 관리하는 Map 본문
1. HashMap class
- Map인터페이스를 구현한 클래스
- 가장 많이 사용되는 Map 인터페이스 클래스
- key - value의 pair로 관리하는 메서드를 구현함
- 검색을 위한 자료구조
- key를 이용하여 값을 지정, key를 사용하여 값을 가져옴. - hash 알고지름으로 구현됨.
- key 가 되는 객체는 중복될 수 없고, 객체의 유일성 비교를 위한 equals(), hashCode() 구현 필요.
- HashTable을 collision이 발생할 수 있다.
Hash함수에 의해 Key값에 대한 index가 반환되는데, 다른 key값이어도 같은index 반환 가능함..
그래서 HashTable을 꽉채워서 쓰지는 않음.
2. HashMap 사용
2.1 MemberHashMap
public class MemberHashMap {
private HashMap<Integer, Member> hashMap;
public MemberHashMap() {
hashMap = new HashMap<>();
}
public void addMember(Member member){
hashMap.put(member.getMemberId(), member);
}
public void removeMember(int memberId){
if (hashMap.containsKey(memberId)){
hashMap.remove(memberId);
return;
}
throw new NoSuchElementException("해당 memberId에 해당하는 Member가 없습니다.");
}
public Member getMember(int memberId){
if (hashMap.containsKey(memberId)){
return hashMap.get(memberId);
}
throw new NoSuchElementException();
}
public Set<Integer> getKeys(){
return hashMap.keySet();
}
public void showAllMember(){
Iterator<Integer> iterator = hashMap.keySet().iterator();
while (iterator.hasNext()){
int key = iterator.next();
Member member = hashMap.get(key);
System.out.println("member = " + member);
}
System.out.println("=========================");
hashMap.keySet().forEach(k -> System.out.println(hashMap.get(k)));
}
}
- 출력 부분은 위와같이 간단히도 가능함 ㅋㅋ
2.2 Test
public class MemberHashMapTest {
MemberHashMap memberHashMap;
@BeforeEach
void beforeTest(){
memberHashMap = new MemberHashMap();
Member member1 = new Member(1001, "A");
Member member2 = new Member(1002, "B");
Member member3 = new Member(1003, "C");
Member member4 = new Member(1004, "D");
memberHashMap.addMember(member1);
memberHashMap.addMember(member3);
memberHashMap.addMember(member4);
memberHashMap.addMember(member2);
}
@Test
void MemberOverlapTest(){
//given
Member member = new Member(1001, "A");
//when
memberHashMap.addMember(member);
//then
memberHashMap.showAllMember();
assertEquals(memberHashMap.getKeys().size(), 4);
}
@Test
void addMemberTest(){
//given
Member member = new Member(1005, "F");
//when
memberHashMap.addMember(member);
//then
assertEquals(memberHashMap.getKeys().size(), 5);
assertEquals(memberHashMap.getMember(member.getMemberId()), member);
memberHashMap.showAllMember();
}
@Test
void removeMemberTest(){
//given
int removeMemberID = 1004;
//when
memberHashMap.removeMember(removeMemberID);
//then
assertEquals(memberHashMap.getKeys().size(), 3);
assertThrows(NoSuchElementException.class, ()-> memberHashMap.getMember(removeMemberID));
memberHashMap.showAllMember();
}
}
- 출력은 두 가지 방식 모두 동일하다.
3. TreeMap 클래스
- Map인터페이스를 구현한 클래스,key에 대한 정렬을 구현할 수 있음
- key가 되는 클래스에 comparable, or comparator를 구현하여 key-value pair자료를 key값 기준으로 관리
4. GitHub: 211025 HashMap
'Java > 자료구조' 카테고리의 다른 글
정렬을 위한 TreeSet 활용 (0) | 2021.10.25 |
---|---|
중복 허용하지 않는 Set 인터페이스 (0) | 2021.10.25 |
Collection 요소를 순회하는 Iterator (0) | 2021.10.24 |
List 인터페이스를 구현한 클래스, 활용 (0) | 2021.10.24 |
컬렉션 프레임워크 (0) | 2021.10.24 |
Comments