반응형
1) HashMap
Map구조는 Key와 Value가 쌍으로 저장되는 형태이다.
2) Key / Value
Key(중복불가능) | Value(중복가능) |
fly | 날다 |
walk | 걷다 |
run | 뛰다 |
Key와 Value가 한 쌍(Entry)으로 저장된다.
그러므로 검색에 용이하다.
Key는 Set타입이고 Value는 Collection 타입이다.
키 ⇔ 해쉬테이블 ⇔ 값
import java.util.HashMap;
public class HMapTest {
public static void main(String[] args) {
HashMap<String, String> map1 = new HashMap<>();
// HashMap에 요소 추가하기
map1.put("fly", "날다");
map1.put("walk", "걷다");
map1.put("run", "뛰다");
// HashMap의 구조 파악하기
System.out.println(map1);
// HashMap의 요소 수정하기
map1.put("run", "달리다"); // 존재하는 키 값에 Value를 또 넣으면 그게 수정
System.out.println(map1);
// HashMap에서 요소 개수
System.out.println(map1.size()); // key와 value는 entry로 봄
// HashMap에서 요소 가져오기
// System.out.println(map1.get("fly"));
// System.out.println(map1.get("run"));
// System.out.println(map1.get("walk"));
// HashMap에서 요소 삭제하기
System.out.println(map1.remove("fly")); // 지워주면서 value 리턴해줌
System.out.println(map1);
}
}
3)
Map 자료구조는 순서를 따지지 않기때문에 Set으로 묶은 후, Iterator를 통해 순서를 부여받아서 사용해야 한다.
4)
.keySet( ) : 키들만 모여있는 Set
.values( ) : 값들만 모여있는 Collection
.entrySet( ) : 키, 값이 하나의 Entry로 모여있는 Set
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
public class HMapTest2 {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "하나");
map.put(2, "둘");
map.put(3, "셋");
map.put(4, "넷");
map.put(5, "다섯");
// System.out.println(map);
// keySet
Set<Integer> keyset = map.keySet();
Iterator<Integer> keyiter = keyset.iterator();
while (keyiter.hasNext()) {
System.out.println(keyiter.next());
}
// values
Collection<String> values = map.values(); //get(i)메소드는 List에 구현되어 있는 메소드이고 Collection에는 존재하지 않는다.
Iterator<String> valueiter = values.iterator();
while (valueiter.hasNext()) {
System.out.println(valueiter.next());
}
//entrySet
Set<Entry<Integer, String>> entryset = map.entrySet();
Iterator<Entry<Integer, String>> entryiter = entryset.iterator();
while(entryiter.hasNext()) {
Entry<Integer, String> entry = entryiter.next();
System.out.println("키 : "+entry.getKey());
System.out.println("값 : "+entry.getValue());
}
}
}
5) 컬렉션 사용시 주의할 점
컬렉션에서는 값들을 비교할 때 요소 타입의 equals( )나 hashCode( )로 비교하기 때문에
우리가 만든 클래스에 equals( )를 재정의하지 않는다면,
주소값에 관련된 비교를 하기때문에 같은 값을 찾아올 수 없다.
따라서 비교하고자 하는 요소를 올바르게 비교하도록 equals( )와 hashCode( )를 재정의해서 사용해야 한다.
반응형
'Back-End > JAVA' 카테고리의 다른 글
[Java] Thread(쓰레드) (0) | 2021.06.01 |
---|---|
[Java] 빠른 for문 (0) | 2021.06.01 |
[Java] HashSet (0) | 2021.06.01 |
[Java] ArrayList (0) | 2021.06.01 |
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2021.05.31 |