컬렉션 프레임워크에 속하는 Map 인터페이스는 무엇일까요?
Map 인터페이스는 List, Set과 다르게 {key와 value} 쌍으로 데이터를 저장하는 컬렉션을 구현하는 데에 사용됩니다.
키와 값으로 구성된 객체는 Entry 객체라고 하며 Entry 객체를 활용하여 또 다른 메서드를 사용할 수도 있습니다.
Map에서 키는 List에서 index 역할과 같이 주로 식별하는 역할을 하며
이러한 특징 때문에 중복 저장될 수 없고, 반면에 값은 중복 저장이 가능합니다.
List의 (int index, object o )= Map (Key, value) 라고 생각하면 이해하기 쉬울 것 같네요
Map 인터페이스는 HashMap, HashTable, SortedMap, TreeMap 등의 클래스에서 구현되며
키를 매개값으로 갖는 매서드 및 다양한 매서드들이 존재합니다.
리턴타입 | 메서드 | 설명 | |
List | void | add(int index,Object o) | 인덱스에 객체를 추가 |
Map | Object | put(Object key, Object value) | 키로 값을 저장, 만약 새로운 키라면 null을 리턴, 기존의 키가 있을 경우 대체되는 value값이 리턴된다. |
List | Object | get(int index) | 인덱스에 저장된 객체를 반환 |
Map | Object | get(Object key) | 키에 해당하는 value값을 리턴합니다. |
위의 표는 List와 Map 을 비교하여 메서드를 정리한 표이다.
Map을 구현하는 클래스 중 HashMap의 특징은 Entry가 삽입되는 순서와 위치가 관계가 없기 때문에
많은 양의 데이터를 검색하는 데 장점이 있습니다.
또한, key와 value값을 포함하고 있는 Entry 객체는 Map인터페이스 내부 인터페이스인 Entry 인터페이스를 구현하며,
Map.Entry 인터페이스에는 Entry를 기반으로 메서드가 정의되어 있습니다.
리턴타입 | 메서드 | 설명 |
Object | getKey() | Entry 객체에 있는 Key 객체를 반환합니다. |
Object | setValue(Object value) | Entry 객체의 value를 입력하는 value로 교체합니다 |
public class CordJgMap {
public static void main(String[] args) {
HashMap<String, Object> idPassword = new HashMap<>();
idPassword.put("고양이", "cuty" + 4 + '!');
idPassword.put("강아지", "cuty" + 4 + '!');
System.out.println(idPassword.put("고양이", "cuty" + 3 + '!'));
Object password = idPassword.get("고양이");
System.out.println(idPassword);
System.out.println(password);
System.out.println(idPassword.size());
Set<Map.Entry<String, Object>> entrySet = idPassword.entrySet();
Iterator<Map.Entry<String, Object>> entryIterator = entrySet.iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, Object> entry = entryIterator.next();
String id = entry.getKey();
Object passnumber = entry.getValue();
System.out.println(id + " : " + passnumber);
}
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("아이디와 비밀번호를 입력해 주세요");
System.out.println("아이디");
String id = scanner.nextLine();
System.out.println("비밀번호");
String passN = scanner.nextLine();
if (idPassword.containsKey(id)) {
if (idPassword.get(id).equals(passN)) {
System.out.println("로그인 되었습니다.");
break;
} else System.out.println("비밀번호가 일치하지 않습니다. ");
} else System.out.println("입력하신 아이디가 존재하지 않습니다.");
}
}
}
//출력
cuty4!
{고양이=cuty3!, 강아지=cuty4!}
cuty3!
2
고양이 : cuty3!
강아지 : cuty4!
아이디와 비밀번호를 입력해 주세요
아이디
고양이
비밀번호
cuty3!
로그인 되었습니다.
위의 코드는 HashMap을 이용하여 마치 우리가 로그인 할 때 사용되는 id와 password처럼
만들어본 코드입니다.
HashMap의 제너럴<> 에는 각각 key와 value의 타입을 적어주고 새로운 객체를 만들어 참조변수에 넣어줍니다
참조변수. put(key, value)를 이용해 HashMap 안에 새로운 entry 객체를 만들 수 있으며
참조변수. put(key, value)를 출력했을 때 key값이 기존에 있었다면 바뀌어진 value 값이 리턴,
새로운 key 값이라면 null이 출력됩니다.
참조변수. get(key)를 통해 value값을 얻을 수 있고
참조변수. size()를 통해 entry 객체가 몇 개 있는지 알 수 있습니다.!
또한 , entry에 있는 각 key와 value를 따로 구분해서 표현하는 방법이 있는데
이를 위해서는 HashMap에 있는 entry를 entrySet() 통해 Set인 새로운 객체를 만들고
Iterator 화 하여 나타낼 수 있습니다.
직접 코딩을 해보면서 key와 value 의 타입도 변경해 보고 , 마치 자기의 아이디와 비밀번호를 설정하듯
key와 value의 값도 변경해보세요!
---------------------------------------------------------------------------------------
Scanner 밑에는 아이디와 비번을 통해 로그인을 구현하는 코드입니다
'Java > Java' 카테고리의 다른 글
Java 객체지향 프로그래밍 static (class 변수, instance변수) (0) | 2023.01.15 |
---|---|
Java 문자열 나누는 방법, 문자열 자르기 ( substring(), split()) (0) | 2023.01.15 |
Java 컬렉션 프레임워크_ Set(TreeSet) (0) | 2023.01.14 |
Java 컬렉션 프레임워크 _ Set(HashSet) (0) | 2023.01.14 |
Java 컬렉션 프레임워크 Iterator (0) | 2023.01.14 |