728x90
Map

 

Key(키)와 Value(값)를 가진 중복을 하용하지 않는 집합이다. (키는 중복x 값은 중복o)

즉 한개의 Key와 한개의 Value가 매칭된다.

 

Map 선언하기

Map<자료형, 자료형> 객체명 = new HashMap<자료형, 자료형>();

※ Map, HashMap import 필요

HashMap

Map Interface를 implements한 클래스로, 중복을 허용하지 않는다.

Map의 특징인 Key - Value의 한 쌍으로 구성된다.

Key 또는 Value의 값으로 null을 허용한다.

HashTable

HashMap과 동일한 내부 구조를 가지고 있다.

hashCode( )와 equals( )를 재정의 하여 동등 객체가 될 조건을 정해서 키로 사용한다.

 

동기화된 메소드로 구성되었기 때문에 멀티 스레드가 동시에 이 메소드를 실행할 수 없고,

하나의 스레드가 실행을 완료해야 다른 스레드가 실행할 수 있다.

즉 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다.

이것을 스레드 안전(thread safe) 이라고 한다.

 

주요 메소드

값 추가하기

{a=b} 

※ 중복된 key가 들어올 경우 덮어쓴다.

Map<String, String> map = new HashMap<String, String>();

System.out.println(map);

map.put("1", "홍길동");
map.put("2", "김길동");
map.put("3", "김길동");
map.put("1", "홍길동2");		//중복된 key가 들어올 경우 덮어쓰여진다

System.out.println(map);
System.out.println(map.size());

[실행결과]

{}
{1=홍길동2, 2=김길동, 3=김길동}
3

값 반환하기

get("key")

key에 해당하는 값(value) 반환

System.out.println(map.get("1"));

[실행결과]

홍길동2

Set으로 반환하기

keySet( )

key들을 set으로 반환 

List<String> list = new ArrayList<String>(map.keySet());
System.out.println(list);

[실행결과]

[1, 2, 3]

해당 값을 key로 가지고 있는지 확인

containsKey("a")

True or False

System.out.println(map.containsKey("1"));
System.out.println(map.containsKey("10"));

[실행결과]

true
false

해당 값을 value로 가지고 있는지 확인

containsValue("a")

True of False

System.out.println(map.containsValue("홍길동2"));
System.out.println(map.containsValue("김길동2"));

[실행결과]

true
false

value값 반환

values( )

System.out.println(map.values());

[실행결과]

[10, 20, 30, 40, 50]

전체 코드

Map<String, String> map = new HashMap<String, String>();	//Map 선언

System.out.println(map);

map.put("1", "홍길동");						//값 추가
map.put("2", "김길동");
map.put("3", "김길동");
map.put("1", "홍길동2");		

System.out.println(map);
System.out.println(map.size());

System.out.println(map.get("1"));				//값 반환

List<String> list = new ArrayList<String>(map.keySet());	
System.out.println(list);					//값 Set으로 반환

System.out.println(map.containsKey("1"));			//해당 값을 Key로 가지고 있는지 확인
System.out.println(map.containsKey("10"));

System.out.println(map.containsValue("홍길동2"));		//해당 값을 Value로 가지고 있는지 확인
System.out.println(map.containsValue("김길동2"));

System.out.println(map.values());				//value값 반환

예제 1.

<key값 출력하기>

Map<String, String> map = new HashMap<String, String>();
map.put("1", "홍길동");
map.put("2", "김길동");
map.put("3", "김길동");
map.put("1", "홍길동2");

//1. map -> list -> for
List<String> list = new ArrayList<String>(map.keySet());
for (int i = 0; i < map.size(); i++) {
	System.out.print(list.get(i) + " : ");
	System.out.println(map.get(list.get(i)));
}

System.out.println("==========");

//2. map -> set -> iterator
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
	String key = it.next();
	System.out.print(key + " : ");
	System.out.println(map.get(key));
}

System.out.println("==========");

//3. map -> set -> foreach
for (String str : map.keySet()) {
	System.out.print(str + " : ");
	System.out.println(map.get(str));
}

System.out.println("==========");

//4. Map.Entry : map 데이터를 key value 한쌍씩 뽑아내기 
//.getKey(), .getValue() 를 이용하여 직접 값 추출
for (Map.Entry<String, String> ele : map.entrySet()) {
	System.out.print(ele.getKey() + " : ");
	System.out.println(ele.getValue());
}

System.out.println("==========");

//5. map -> set -> Array -> for
//배열로 변환 (set -> Array)
Object[] keyArray = map.keySet().toArray();

for (int i = 0; i < keyArray.length; i++) {
	String key = (String) keyArray[i];
	System.out.println(key + " : " + map.get(key));
}
  • map.entrySet( ) : 해당 map에 담겨있는 key value의 연결들(mapping)을 반환

[실행결과]

1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동
==========
1 : 홍길동2
2 : 김길동
3 : 김길동

예제 2.

<map으로 로그인 하기>

//key = id, value = password
Map<String, String> login = new HashMap<String, String>();
login.put("poseidon", "01234567");
login.put("temp", "temp0000");
login.put("admin", "00000000");
login.put("root", "rootroot");
		
Scanner sc = new Scanner(System.in);
System.out.println("아이디를 입력하세요.");
String id = sc.next();
		
System.out.println("비밀번호를 입력하세요.");
String pw = sc.next();
		
if(login.containsKey(id)) {
	if(login.get(id).equals(pw)) {
		System.out.println("정상 로그인입니다.");
	}else {
		System.out.println("비밀번호가 일치하지 않습니다.");
	}
}else {
	System.out.println("해당 ID는 시스템에 없습니다.");
}

[3가지 경우 실행결과]

아이디를 입력하세요.
roo
비밀번호를 입력하세요.
root
해당 ID는 시스템에 없습니다.

..........................................................

아이디를 입력하세요.
root
비밀번호를 입력하세요.
root
비밀번호가 일치하지 않습니다.

..........................................................

아이디를 입력하세요.
root
비밀번호를 입력하세요.
rootroot
정상 로그인입니다.

'JAVA' 카테고리의 다른 글

예외처리 (Exception)  (0) 2021.07.26
스택 (Stack)과 큐(Queue)  (0) 2021.07.26
HashSet  (0) 2021.07.22
LinkedList  (0) 2021.07.22
ArrayList  (0) 2021.07.22

+ Recent posts