티스토리 뷰

Collections Framework

 

[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

댓글