본문 바로가기
java

Collection(Map)

by 신방동불주먹 2022. 10. 12.

<  Map >

 

- 특징 :

- 순서를 가지지 않는다

- key와 value 가 쌍으로 이루어진다

- key는 중복이 안되나, value는 중복이 가능하다

- 키가 중복되는 데이터가 있을 때 마지막 데이터값을 저장한다

 

 

1. HashMap : 일반적으로 많이 사용하는 Map 자료구조

2. HashTable : HashMap과 동일하나 Thread-Safe 해 동기화를 지원

3. LinkedHashMap : 순서를 가지지 않는 Map 자료구조와 달리 LinkedHashMap은 들어온 순서대로 순서를 가짐

4. TreeMap : TreeSet과 같이 정렬하여 데이터를 저장 -> 데이터 저장시 정렬로 인해 저장 시간이 다른 자료구조 대비 오래걸림

 

 

 

<HashMap>

 

1. 선언

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

 

 

2. 데이터 삽입 : put(key, value)

map.put("myid", "1234");
map.put("your", "1111");
map.put("your", "3114");
  •  map.put("myid", 1234); int 기본형 입력시 wrapper class 처리가 되어 Integer타입으로 변한다.
  • <String>제네릭 정의 시 1234 입력하면 오류 발생 
  • 중복을 허용하지 않으나 중복 된 key 값이 있을 때 가장 마지막으로 들어온 데이터를 넣는다

 

 

3. 데이터 검색 : get(key)  value값을 반환

(String)map.get("myid");
  • "1234"

 

 

4. 데이터 삭제 : remove(key)

map.remove("myid");
  • key("myid")에 해당하는 value("1234")가 삭제된다

 

 

5. key 값 전체를 반환 : keySet()

Set<String> keys = map.keySet();	
Iterator<String> it = keys.iterator();

while(it.hasNext()) {
	String key = it.next();
	System.out.println(key);
   }
  • Map은 반복자 Iterator를 지원하지 않기 때문에 Set 타입 변수에 넣는다??

 

 

6. value 값 전체를 반환 : values()

Collection<String> values = map.values();
Iterator<String> itV = values.iterator();
		
while(itV.hasNext()) {
	String value = itV.next();
	System.out.println(value);
}
  • Map은 반복자 Iterator를 지원하지 않기 때문에 Collection 타입으로 가져온다??

 

7. 키값의 존재유무 확인 : containsKey(key) -> true, false 반환

 

 

8. key와 value를 전체 반환 : entrySet()

 

  • map 인터페이스 내부 의 entry 인터페이스를 사용
  • 내부에 getkey, getvalue 가 포함되어 있다
  • <Stirng, String> 타입만 정의해주면 된다. 나머지는 정해진 문법

Set<Map.Entry<String, String>> entry = map.entrySet();

Iterator<Map.Entry<String, String>> itE = entry.iterator();
		
while(itE.hasNext()) {
	Map.Entry<String, String> ent = itE.next();
	String key = ent.getKey();
	String value = ent.getValue();	
	System.out.println("[key]:" + key + ", [value]:" + value);
}
//Iterator가 아닌 for문으로 출력방법

for(String key: map.keySet()) {
	System.out.println(key);
}
  • for문 활용 출력
for(Map.Entry<String, String> ent : map.entrySet()) {
	String key = ent.getKey();
	String value = ent.getValue();
	System.out.println("[key]:" + key + ", [value]:" + value);
}

 

 

< 간단 연습문제>

while(true) {
	System.out.println("아이디 입력: ");
	String id = sc.next();
			
	System.out.println("패스워드 입력: ");
	String password = sc.next();
			
	if(!map.containsKey(id)) { //key값이 존재하지 않는다면
	System.out.println("아이디가 존재하지 않습니다. 다시 입력하세요 :");
		continue;
	}else {
		if(!map.get(id).equals(password)) { //값을 가져오니까
		System.out.println("패스워드를 다시 입력하세요");
	}else {
		System.out.println("로그인 성공");
		break;
		}
	}
}

'java' 카테고리의 다른 글

Collection(Set)  (0) 2022.10.12
Properties  (0) 2022.10.12
Iterator (반복자 패턴)  (0) 2022.10.11
제네릭과 컬렉션  (0) 2022.10.11
Collection(List)  (0) 2022.10.11