Hashmap(해쉬맵) -미완성

2020. 3. 16. 14:03자바 Java/자바 공부 java study

반응형

 key  키값은 숫자 못들어간다. 

value  객체가 들어간다..? 

 

 

 

1. HashMap이란?

: HashMap은 Map을 구현한다. Key와 value를 묶어 하나의 entry로 저장한다는 특징을 갖는다. 그리고 hashing을 사용하기 때문에 많은양의 데이터를 검색하는데 뛰어난 성능을 보인다.

 

  • Map 인터페이스의 한 종류로 ( "Key", value) 로 이뤄져 있다.
  • key 값을 중복이 불가능 하고 value는 중복이 가능. value에 null값도 사용 가능하다.
  • 멀티쓰레드에서 동시에 HashMap을 건드려 Key - value값을 사용하면 문제가 될 수 있다. 멀티쓰레드에서는 HashTable을 쓴다


2. HashMap 생성자 / 메서드

 

 

 

 

 

 

 

생성자/메서드 내용 
HashMap()

- HashMap 객체를 생성

ex) HashMap<String , Integer> map = new HashMap<String , Integer>();

      Map<String, Integer> map = new HashMap<String, integer>();

Object.get(Object Key)

- 지정된 Key 의 값을 반환한다.

ex) map.put("A", 1);

      map.put("B", 2);

      map.put("C", 3);

      String val = (String)map.get("B");

System.out.println("Value for key B is: " + val);

(result) Value for key B is 2

bloolean isEmpty

- HashMap이 비어있는지 확인한다. IsEmpty()는 HashMap의 데이터가 비어있다면 true를 리턴하고 아니라면 false를 리턴합니다

ex) boolean val = map.isEmpty();

Set keySet()

- HashMap에 저장된 모든 키가 저장된 Set을 반환한다

ex) map.put("A", 1);

      map.put("B", 2);

      map.put("C", 3);

      Set keyset = map.keySet();

      System.out.println("Key set values are" + keyset);

      (result) Key set values are [A,B,C]

Object put(Object Key, Object Value)


- HashMap에 키와 값을 저장.

ex) map.put("A", "aaa");

      map.put("B", "bbb");

      map.put("C", "ccc");

Object.remove(Object Key)

- HashMap에서 지정된 키로 지정된 값을 제거한다.

ex) map.remove("key");

int size()

- HashMap에 저장된 요소의 개수를 반환한다.

Object.putAll()

인자로 전달된 Map에 대한 데이터를 모두 저장합니다.

Object.clear()

clear()는 HashMap의 모든 데이터를 삭제합니다.

 

 

다음은 putAll로 두개의 Map을 합치는 예제입니다

Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);

Map<String, Integer> food = new HashMap<>();
food.put("coffee", 1);
food.put("hamburger", 2);
food.put("sandwich", 3);

food.putAll(fruits);
System.out.println("food: " + food);

// food: {banana=2, apple=1, kiwi=3, coffee=1, sandwich=3, hamburger=2}

 

다음 예제를 보시면 HashMap에 데이터가 있을 때 isEmpty() 결과와 clear()로 모든 데이터를 삭제한 후 isEmpty() 결과가 다른 것을 알 수 있습니다.

Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
System.out.println("fruits: " + fruits);
System.out.println("is empty? " + fruits.isEmpty());

fruits.clear();
System.out.println("fruits: " + fruits);
System.out.println("is empty? " + fruits.isEmpty());

// fruits: {banana=2, apple=1, kiwi=3}
// is empty? false
// fruits: {}
// is empty? true

 

 

keySet(), values()

keySet()은 HashMap에 저장된 key들을 Set 객체로 리턴해줍니다.

 

public Set<K> keySet()

 

 

 

 values()는 HashMap에 저장된 value들을 Collection 객체로 리턴해줍니다.

public Collection<V> values()

다음은 key와 value들을 각각 출력하는 예제입니다.

 

Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
System.out.println("keySet(): " + fruits.keySet());
System.out.println("values(): " + fruits.values());

Set<String> keys = fruits.keySet();
for (String key : keys) {
    System.out.println("key: " + key);
}

Collection<Integer> values = fruits.values();
for (Integer value : values) {
    System.out.println("value: " + value);
}

// keySet(): [banana, apple, kiwi]
// values(): [2, 1, 3]
// key: banana
// key: apple
// key: kiwi
// value: 2
// value: 1
// value: 3

 

 

 

containsKey(), containsValue()

containsKey()는 HashMap에 인자로 전달된 key가 존재하면 true를 리턴하고 그렇지 않으면 false를 리턴합니다.

public boolean containsKey(Object key)

 

containsValue()는 HashMap에 인자로 전달된 key가 존재하면 true를 리턴하고 그렇지 않으면 false를 리턴합니다.

public boolean containsValue(Object value)

다음 예제는 존재하는 경우와 존재하지 않는 경우에 대한 key, value를 확인해보고 있습니다.

Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);

System.out.println("containsKey(apple): " + fruits.containsKey("apple"));
System.out.println("containsKey(undefined): " + fruits.containsKey("undefined"));
System.out.println("containsValue(1): " + fruits.containsValue(1));
System.out.println("containsValue(0): " + fruits.containsValue(0));

// containsKey(apple): true
// containsKey(undefined): false
// containsValue(1): true
// containsValue(0): false

 

 

replace()

replace()는 인자로 전달된 key의 value를 인자로 전달된 value로 교체해 줍니다. 교체되어 삭제되는 value는 리턴됩니다. 존재하지 않는 key가 인자로 전달되면 null이 리턴됩니다.

 

public V replace(K key, V value)

다음은 존재하는 key와 존재하지 않는 key에 대해서 replace를 시도하는 코드입니다.

 

Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
System.out.println("fruits: " + fruits);

System.out.println("replace(apple, 10): "  + fruits.replace("apple", 10));
System.out.println("replace(undefined, 10): "  + fruits.replace("undefined", 10));
System.out.println("fruits: " + fruits);

// fruits: {banana=2, apple=1, kiwi=3}
// replace(apple, 10): 1
// replace(undefined, 10): null
// fruits: {banana=2, apple=10, kiwi=3}

 

인자와 리턴 타입이 다른 replace() 메소드도 있습니다. 인자를 보시면 3개가 있습니다. 첫번째는 key, 두번째는 oldValue, 세번째는 newValue입니다. 저장된 key의 value가 oldValue와 동일할 때만 newValue로 변경해 줍니다. 교체가 되면 true를 리턴하며, oldValue와 동일하지 않으면 교체되지 않고 false가 리턴됩니다.

 

 

public boolean replace(K key, V oldValue, V newValue)

다음은 oldValue가 일치하여 교체가 되는 경우와, oldValue가 달라 교체되지 않는 경우에 대한 예제입니다.

 

 

Map<String, Integer> fruits = new HashMap<>();
fruits.put("apple", 1);
fruits.put("banana", 2);
fruits.put("kiwi", 3);
System.out.println("fruits: " + fruits);

System.out.println("replace(apple, 1, 10): "  + fruits.replace("apple", 1, 10));
System.out.println("replace(banana, 1, 10): "  + fruits.replace("banana", 1, 20));
System.out.println("fruits: " + fruits);

// fruits: {banana=2, apple=1, kiwi=3}
// replace(apple, 1, 10): true
// replace(banana, 1, 10): false
// fruits: {banana=2, apple=10, kiwi=3}

 

 

 

 

 

 

 

 

<예제>

 

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

 

pubilc class HashMapDemo

{

 public static void main(String[] args) 

 {

  HashMap<String, Integer> fruitMap = new HashMap();

  fruitMap.put("사과", 1000);

  fruitMap.put("배", 2000);

  fruitMap.put("자두", 3000);

  fruitMap.put("수박", 4000);

 

  // get() --> Key에 해당하는 Value를 출력한다.

  System.out.println( fruitMap.get("자두") );   // 3000

 

        // values() --> 저장된 모든 값 출력

  System.out.println( fruitMap.values() ); // [1000, 2000, 3000, 4000]

 

  // HashMap에 넣은 Key와 Value를 Set에 넣고 iterator에 값으로 Set정보를 담에 준다.

  // Interator itr = fruitMap.entrySet().interator(); 와 같다.

  Set<Entry<String, Integer>> set = fruitMap.entrySet();

  Interator<Entry<String, Integer>> itr = set.interator();

  while (itr.hasNext())

  {

   Map.Entry<String, Integer> e = (Map.Entry<String, Integer>)itr.next();

   System.out.println("이름 : " + e.getKey() + ", 가격 : " + e.getValue() + "원");

  }

}

 

 

결과 :

이름 : 사과, 가격 : 1000원

이름 : 배, 가격 : 2000원

이름 : 자두, 가격 : 3000원

이름 : 수박, 가격 :  4000원

 

 

 

반응형