본문 바로가기
Java

2022-09-08 자바

by allwing12 2022. 9. 8.
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 값은 똑같아도 된다..!

 

 

댓글