본문으로 바로가기

Java- 컬렉션 프레임워크(HashMap)

category 프로그래밍 언어/Java 2019. 7. 22. 14:24

1. HashMap

Map의 특성을 받아 (키,값)=>엔트리을 이용합니다. 추가적으로 해싱을 사용합니다.

 

키는 중복이 되선 아니되고 값은 중복을 허용합니다.

 

대량의 데이터를 검색하는데 효율적입니다.

// 비객체지향적인 코드
Object[] key;
Object[] value;

// 객체지향
Entry[] table;
class Entry {
  Object key;
  Object value;
}

Object 타입의 키와 값을 이용합니다. 형변환을 통해 어떠한 객체도 저장할 수 있습니다.

 

Key는 보통 String의 형태로 저장을 하게됩니다.

 

public class HashMapEx1 {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("dlwjdcks", "1234");
        map.put("dlwjdcks12", "1111");
        map.put("dlwjdcks123", "1234");

        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("id와 pw를 입력해주세요");
            System.out.println("id : ");
            String id = scanner.nextLine().trim();

            System.out.println("pw : ");
            String pw = scanner.nextLine().trim();
            System.out.println();

            // 아이디 불일치
            if (!map.containsKey(id)) {
                System.out.println("입력한 id는 존재하지 않습니다. 다시 입력해주세요.");
                continue;
            } else {
                if (!(map.get(id)).equals(pw)) {
                    System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.");
                } else {
                    System.out.println("id와 pw가 일치합니다.");
                    break;
                }
            }
        }
    }
}

위 예제는 Id와 password를 HashMap에 저장을 하고 map에 대해 키가 있는지 확인하는 containsKey를 통해

 

존재 여부를 확인 후 키에 있는 값을 가져와서 입력한 pw와 같은지 확인합니다.

 

해시맵을 읽고 저장하고 읽는 연산이 있습니다.

  • entrySet(): 해시맵에 저장된 엔트리를 Set에 저장하여 반환
  • KeySet(): 키만 Set에 반환
  • values(): 값만 컬렉션의 형태로 반환
public class HashMapEx2 {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("a", new Integer(40));
        map.put("b", new Integer(66));
        map.put("c", new Integer(45));
        map.put("d", new Integer(72));
        map.put("e", new Integer(92));
        map.put("f", new Integer(80));

        Set set = map.entrySet();
        Iterator iterator = set.iterator();

        while (iterator.hasNext()) {
            Map.Entry entry = (Map.Entry) iterator.next();
            System.out.println("name : " + entry.getKey() + ", score : " + entry.getValue());
        }

        set = map.keySet();
        System.out.println("name list : " + set);

        Collection values = map.values();
        iterator = values.iterator();

        int total = 0;

        while (iterator.hasNext()) {
            Integer i = (Integer) iterator.next();
            total += i.intValue();
        }

        System.out.println("sum :" + total);
        System.out.println("average : " + (float) total / set.size());
        System.out.println("max : " + Collections.max(values));
        System.out.println("min : " + Collections.min(values));
    }
}

 


2. Hashing

해싱은 많은 양의 데이터들을 해시함수를 이용해서 작은 크기의 테이블로 대응시켜 저장할 수 있도록 하는 일종의 데이터 관리 기법입니다.

 

해시함수는 가변길이의 데이터를 고정길이의 데이터로 매핑해주는 함수로 이때 의 값을 해시라고 합니다.

 

해시함수는 데이터가 저장된 곳을 알려주기 때문에 효과적인 검색을 마칠 수 있습니다.