티스토리 뷰
[Map]
key : 중복 X, value : 중복 O
값을 추가할 때 put() 메소드 사용 (Map 계열에서만 사용 가능)
값을 가져올 때 get() 메소드 사용
-> get의 매개변수에 key를 쓰면 key에 대응되는 value 값을 가져옴
ex)
HashMap<String, String> tel = new HashMap<String, String>();
// 값 저장
tel.put("서울", "02");
tel.put("경기", "031");
// 저장된 값 가져옴
System.out.println(tel.get("서울"));
System.out.println(tel.get("경기"));
실행 결과>
02
031
Map에 값을 추가하면 Entry 객체가 생성된다.
Entry 클래스에는 각각 Key와 Value의 값을 얻을 수 있는 getKey(), getValue() 메소드가 존재한다.
Map에는 Iterator가 없다
그러므로 Map에서 Iterator를 사용하려면 entrySet() 메소드를 이용해야 한다!
※ entrySet() 메소드 : Map을 Set 형태로 만들어줌 (Set 내부 Entry는 Object형)
ex1) Iterator를 이용해 출력
package CollectionEx;
import java.util.*;
public class CollectionEx {
public static void main(String[] args) {
HashMap<String, String> tel = new HashMap<String, String>();
tel.put("서울", "02");
tel.put("경기", "031");
Set set = tel.entrySet();
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
System.out.println("지역 : " + e.getKey() + ", 지역번호 : " +e.getValue());
}
}
}
Iterator는 Set의 내부를 가리키고 있는데, Set 내부의 정보는 Object형이다.
그래서 it.next()로 데이터를 가져왔을 때 타입이 Object이므로 Map.Entry 형으로 명시적 형변환을 해주어야 한다.
ex2) Iterator를 이용해 출력
package CollectionEx;
import java.util.*;
public class CollectionEx{
public static void main(String[] args) {
HashMap<String, String> tel = new HashMap<String, String>();
tel.put("서울", "02");
tel.put("경기", "031");
Set<Map.Entry<String,String>> set = tel.entrySet();
Iterator<Map.Entry<String, String>> it = set.iterator();
while(it.hasNext()) {
Map.Entry e = it.next();
System.out.println("지역 : " + e.getKey() + ", 지역번호 : " +e.getValue());
}
}
}
Set을 Generic을 이용해 만들면 지정한 타입으로 데이터가 Set 내부에 저장된다.
이 예제에서는 Map.Entry형으로 데이터가 저장된다.
그러므로 ex1과는 다르게 it.next()로 데이터를 가져올 때 이 자체가 Map.Entry 형이므로 형변환을 하지 않아도 된다.
또한, Set에 Generic을 썼다면 그 내부 데이터를 가리키는 역할을 하는 Iterator에도 똑같이 Generic을 써야 한다.
ex3) for-each문을 이용해 출력
package CollectionEx;
import java.util.*;
public class CollectionEx{
public static void main(String[] args) {
HashMap<String, String> tel = new HashMap<String, String>();
tel.put("서울", "02");
tel.put("경기", "031");
Set<Map.Entry<String,String>> set = tel.entrySet();
for(Map.Entry<String, String> e : set)
{
System.out.println("지역 : " + e.getKey() + ", 지역번호 : " +e.getValue());
}
}
}
Generic을 이용해 Set을 만들었으므로 Set 내부 데이터는 Map.Entry형으로 저장된다.
for-each문의 콜론 뒤에는 Map 형태가 올 수 없기 때문에 Map을 Set 형태로 변형해줘야 한다!
for-each문을 이용해 Set의 모든 내부 데이터를 한번에 하나씩 Map.Entry형 변수 e에 저장하고,
Entry 클래스의 getKey(), getValue() 메소드를 이용해 key와 value를 출력한다.
'Java, JavaScript' 카테고리의 다른 글
[Java] ByteArrayStream, PipedStream (0) | 2019.06.28 |
---|---|
[Java] read() , FileIOStream (0) | 2019.06.23 |
[Java] Collections Framework - Collection(List, Set) (0) | 2019.06.18 |
[Java] Generic (0) | 2019.06.14 |
[Java] enum 클래스 (0) | 2019.06.14 |