package com.example.MyJavaProject;
class Main {
public static void main(String[] args) {
HashMap aMap = new HashMap();
aMap.put(1, "안녕");
aMap.put("A", false);
aMap.put("A", true);
System.out.println(aMap.get("A"));
// 출력 : true
}
}
class HashMap {
int size;
Object[] keys;
Object[] values;
HashMap() {
int arraySize = 3;
size = 0;
keys = new Object[arraySize];
values = new Object[arraySize];
}
void put (Object key, Object value) {
keys[size] = key;
values[size] = value;
size++;
}
private int getofIndex (Object key) {
for (int i = 0; i < size; i++) {
if (keys[i].equals(key)){
return i+1;
}
}
return -1;
}
Object get (Object key) {
int index = getofIndex(key);
if (index != -1){
return values[index];
}
return null;
}
}
어제 했던 문제에서 같은 key의 값과 다른 value 값이 들어가있는 상태에서 다른 value의 값인
true를 출력해야하는 문제이다.
이 문제는 어제 했던 것에서 어떤 것을 바꿔야 true 가 나올까 생각을 해보게 했던 문제인 것 같다.
get("A") 라는 결국에는 key의 값이 똑같은 상태에서 어제와 같은 코드를 짜면 어떻게 해도
false 나 null 이 나오게 된다, 그래서 생각을 해본게 어쨌든 key의 값이 똑같고 private int getofIndex 라는 함수에
쓴 for 문을 보게 되면 if (keys[i].equals(key)) 때문에 어떻게 하든 key의 값이 "A"라서 false에서 무조건 걸린다.
그렇기 때문에 어떻게든 false에서 걸려버리기 때문에 true가 절대 안나온다 그래서 간단하게 생각한게
keys[i]는 결국엔 keys[size] 인 size 값이기 때문에 return에 i+1 을 해서 어쨌든 똑같은 key의 값인 "A" 지만
size 값이 +1 되는 코드를 짜서 true를 출력하게 했다.
package com.example.MyJavaProject;
// 문제 : 아래와 같이 출력되도록 해주세요.
class Main {
public static void main(String[] args) {
HashMap aMap = new HashMap();
aMap.put(1, "안녕");
aMap.put(2, "안녕2");
aMap.put(3, "안녕3");
aMap.put("A", false);
aMap.put("A", true);
System.out.println(aMap.get("A"));
// 출력 : true
}
}
class HashMap {
private Object[] keys;
private Object[] values;
int size;
HashMap() {
int arrSize = 2;
size = 0;
keys = new Object[arrSize];
values = new Object[arrSize];
}
private int getIndexOfKey(Object key) {
int index = -1;
for (int i = 0; i < size; i++) {
if(key.equals(keys[i])) {
index = i;
break;
}
}
return index;
}
private void extendArrayIfNeed() {
if(keys.length == size) {
Object[] newKeys = new Object[keys.length*2];
Object[] newValues = new Object[values.length*2];
for(int i = 0; i < size; i++) {
newKeys[i] = keys[i];
newValues[i] = values[i];
}
keys = newKeys;
values = newValues;
}
}
void put(Object key, Object value) {
extendArrayIfNeed();
int index = getIndexOfKey(key);
if(index == -1) {
keys[size] = key;
values[size] = value;
size++;
return;
}
values[index] = value;
}
Object get(Object key) {
int index = getIndexOfKey(key);
if(index != -1) {
return values[index];
}
return null;
}
}
근데 수업 때 강사님께서는 이렇게 푸셨는데 뭔가 내가 생각했던 것 보다 어렵게 풀어서 이해가 안간다...
내가 생각했던 건 그냥 key의 값이 똑같아서 false에서 계속 멈추니까 +1을 해서 true를 출력한건데...
이렇게 어렵게 푸실지는 몰랐는데 코드를 좀 보면서 이해를 최대한 해보려고 해봐야할 것 같다...
아 참고로 원래 key의 값은 똑같으면 안된다 key의 값은 똑같으면 안되지만 value 값은 똑같아도 된다..!
'Java' 카테고리의 다른 글
| 2022-09-14 자바 (접근 제어자, getter/setter, 에러처리) (0) | 2022.09.14 |
|---|---|
| 2022-09-13 자바 수업 (interface,implements) (0) | 2022.09.13 |
| 2022-09-07 자바 (제네릭, 해쉬맵(간단)) (0) | 2022.09.07 |
| 2022-09-06 자바 (배열의 길이, 배열 삭제, 제네릭) (0) | 2022.09.06 |
| 자바 배열 (array) 알아보기 from 점프 투 자바 (0) | 2022.09.06 |
댓글