2013년 6월 2일 일요일

Map 인터페이스

Map
    put(K key, V value) : 첫번째 매개변수인 키를 갖고 두번째 매개변수인 값을 갖는 데이터를
                                       저장
    putAll(Map<? extends K, ? extends V> m) : 매개 변수로 넘어온 Map의 모든 데이터를 저장

    get(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨준다.

    remove(Object key) : 매개 변수로 넘어온 키에 해당하는 값을 넘겨주며 map에서 삭제

    keySet() : Key의 목록을 Set 타입으로 리턴

    values() : 값의 목록을 Collection 타입으로 리턴한다.

    : 종류 : HashMap, TreeMap, LinkedHashMap

여러 쓰레드에 동시에 접근하여 처리할 필요가 있을 때
Map m = Collections.synchronizedMap(new Hashmap(...));
























HashMap
  Object -> AbstractMap<K, V> -> HashMap<K, V>
  : Serializable, Cloneable, Map<E>

HashMap<String, String> map = new HashMap<String, String>();
map.put("A", "a");
map.put("C", "c");
map.put("D", "d");

Set<String> keySet = map.keySet();
for(String tempKey : keySet){
    System.out.println(tempKey + " = " + map.get(tempKey));
}
-> 현재 map에 저장된 key, value에 대한 값을 가져온다.
    Set의 값을 뿌려주기 때문에 데이터가 정렬되어 나오진 않는다.

HashMap에 저장하는 키가 되는 객체를 직접 만들었을 경우 유의사항
 -> 직접 어떤 클래스를 만들어 그 클래스를 키로 사용할 때에는 Object 클래스의 hashCode() 메소드와 equals() 메소드를 잘 구현해놓아야 한다
    -> HashMap에 객체가 들어가면 hashCode() 메소드의 결과 값에 따른 버켓(bucket) 이라는 List 형태의 저장소가 만들어진다. 만약 서로 다른 키가 저장되었는데, hashCode() 메소드의 결과가 동일하다면 이 버켓에 여러개의 값이 들어갈수 잇다. 따라서 get() 메소드가 호출되면 hashCode()의 결과를 확인하고 버켓에 들어간 목록에 데이터가 여러개일경우 equals() 메소드를 호출하여 동일한 값을 찾게 된다.

정렬된 키의 목록을 원한다면 TreeMap 사용






댓글 1개:

  1. Harrah's Cherokee Casino Resort: Now Open! - Jackson
    Harrah's Cherokee Casino Resort is open 동두천 출장안마 for business starting Friday, May 12 from 9 a.m. to 3 보령 출장샵 p.m. for 충청북도 출장안마 all casino games. The casino is 태백 출장안마 open 군산 출장안마

    답글삭제