반응형

 

 

 

Collection Framework Hierarchy in java

 

 

 목차 

1. Map 키워드 설명
  1.1. HashMap
  1.2. HashTable
  1.3. LinkedHashTable
  1.4. TreeMap설명

2. HashMap 사용법
   2.1 선언
   2.2 CRUD
   2.3 출력 및 참고 메소드

3. HashTable 사용법
   3.1 선언
   3.2 CRUD
   3.3 출력 및 참고 메소드

4. LinkedHashTable 사용법
   4.1 선언
   4.2 CRUD
   4.3 출력 및 참고 메소드

5. TreeMap 사용법
   5.1 선언
   5.2 CRUD
   5.3 출력 및 참고 메소드

 

Interface, Class

  • 인터페이스란 직접 인스턴스를 구성할 수 없으며 Class와 같은 구체적인 클래스로 인스턴스를 생성 해야함.

 

Extends, Implements

  • -

 Map 키워드 설명 

  •  Map
    • Map은 Interface 로 <Key, Value>를 으로 저장하고 관리하는 데이터 구조
    • Key는 저장 순서를 보장하지 않고 중복도 허용하지 않는다. (=Set 과 동일)
    • <Key,Value> 모두 객체로 사용
    • Map 인터페이스는 범용적이라서, 구체적인 구현 클래스를 나중에 변경 가능
    • Map은 직접 인스턴스를 생성할 수 없다.
    • 주요 클래스는 HashTable, LinkedHashTable, HashMap, TreeMap

 

/* Map 유연성 및 의존성을 낮춰준다.  */ 
Map<Character, Integer> alphabetCount = new HashMap<Character, Integer>();

/* HashMap 구체화  */ 
HashMap<String, Object> alphabetCount = new HashMap<String, Object>();

/* 내가 선호하는 방법 */ 
Map<String, Object> alphabetCount = new HashMap<>();

 

 


 

  • HashMap
    • 데이터의 추가,삭제,검색속도가 빠르고 순서가 중요하지 않는 경우에 사용
    • 해시 충돌이 발생할 우려 존재 (추후 정리)
    • <Key, Value>가 바로 매핑되지 않고 해시 키를 해시코드로 변환하여 데이터를 저장하고 검색
    • 멀티스레드 환경에서 부적합 ( HashTable이 적합)
      • 동시에 HashMap을 건드리면 Key-value값이 문제가 된다.

 


 

  • HashTable
    • <Key, Value>가 바로 매핑되지 않고 해시 함수를 통해 해시 값을 생성하여 주소값처럼 사용해 검색에 용이하게 만듬
    • 멀티스레드 환경에서 적합 ( HashMap이 부적합 )
      • 동시에 HashMap을 건드리면 Key-value값이 문제가 된다.
    • 동기화를 보장

 


  • LinkedHashTable
    • 데이터의 추가된 순서를 보존하고자 할때 사용

 

 


 

  • TreeMap
    • 순서가 중요하고 정렬된 데이터 유지 필요시 사용 
    • Key를 기준으로 정렬이 되어 있다. (binary search tree) 
      • 정렬 기준은 이진 트리 기반
        • 이진트리란
          • 2가지의 길 밖에 없으니 크면 오른쪽 작으면 왼쪽 으로 움직여 자리를 찾아가는 기법
          • 장점은 추가,제거에 속도가 빠르다.

 


 HashMap 사용법 

Step1.선언

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

Map<Object,Object> map = new HashMap<>(); 
Map<Object,Object> map = new HashMap<>(10);//초기 용량(capacity)지정

Map<Object,Object> map = new HashMap<>(map);


Map<Object,Object> map = new HashMap<>(10, 0.7f);//초기 capacity,load factor지정

Map<Object,Object> map = new HashMap<String,String>(){{//초기값 지정
    put("a","b");
}};
더보기

/*
 * Method  : HashMap()
 * Explain : HashMap객체 생성
 */
HashMap<String,Integer> map = new HashMap<String, Integer>();
Map<String, Integer>    map = new HashMap<String, Integer>();

/*
 * Method  : HashMap(int initlalCapacity)
 * Explain : 초기 용량
 */
Map<Object,Object> map = new HashMap<>(); 
Map<Object,Object> map = new HashMap<>(10);//초기 용량(capacity)지정

/*
 * Method  : HashMap(Map m) 
 * Explain : Map에 저장된 모든 요소를 포함하는 HashMap을 생성. 
 */
Map<Object,Object> map = new HashMap<>(map);

/*
 * Method  : HashMap(int initlalCapacity, float loadFactory) 
 * Explain : loadFactory 은 해시맵의 버킷 비율이 값만큼 채워지면 리사이징 작업을 해 해시 충돌 최소화.
   로드 팩터를 높이면 메모리 사용량은 줄지만, 충돌 가능성이 높다.
 */
Map<Object,Object> map = new HashMap<>(10, 0.7f);//초기 capacity,load factor지정


Map<Object,Object> map = new HashMap<String,String>(){{//초기값 지정
    put("a","b");
}};

 

Step2. CRUD 

Map<String, Integer> map = new HashMap<String, Integer>();
 
map.put("A", 1);
map.put("B", 1);

map.put("A", 100); //최종값으로 업데이트
map.put("A", map.get("A") -99); //업데이트 방법
map.replace("A",50); 

map.get("A");

map.remove("A");

map.clear();

 

더보기

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

/*
 * Method  : Object put(Object Key, Object Value)
 * Explain : 값 생성 및 업데이트
 */
 
map.put("A", 1);
map.put("B", 1);

map.put("A", 100); //최종값으로 업데이트
map.put("A", map.get("A") -99); //업데이트 방법
map.replace("A",50); 


/*
 * Method  : Object get(Object Key)
 * Explain : 값 읽기
 */

map.get("A");


/*
 * Method  : Object remove(Object Key)
 * Explain : 값 삭제
 */

map.remove("A");

/*
 * Method  : void clear()
 * Explain : 객체 모두 삭제
 */

map.clear();

Step3.  그외 참조할 코드 

map.size();
map.isEmpty(); 

map.put("A", 1);
map.put("B", 2);
map.put("C", 3);

boolean containsKey(Object Key)
boolean containsValue(Object Value)
map.containsKey("B"); //true
map.containsValue(4); //false

 

값 출력은 entrySet(), KeySet(), Iterator 등

Iterator은 자바의 컬렉션 프레임 워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 한 것
/******전체 출력*******/
/*
    KeySet() 활용
    HashMap에 저장된 모든 키를 Set으로 반환한다.
*/
Set<String> keyset = map.keySet(); 
System.out.println(keyset); // [A,B,C]

/*
    entrySet() 활용
    HashMap에 저장된 <Key,Value>값을 Entry(키,값을 결합)의 형태로 Set에 저장하여 반환
    Map.Entry<> 로 entrySet()이 반환하는 key,Value를 갖는 하나의 객체로 얻을 수 있다.
    전환 과정을 학습하기 위해서 번거롭게 한거임
*/
Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); 
for (Map.Entry<String, Integer> entry : entrySet) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}
/* 단순하게 */
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

/******요소 값 출력*******/
/*
    keySet() 활용
*/
for (String key : map.keySet()) {
    System.out.println(key + "=" + map.get(key));
}

/*
    entrySet() 활용
*/
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

/*
    keySet() 활용
*/
for (String key : map.keySet()) { 
    System.out.println(key + "=" + map.get(key));
}



// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<String> keys = map.keySet().iterator();
while (keys.hasNext()) {
    String key = keys.next();
    System.out.println(key + "=" + map.get(key));
}

//HashMap에 넣은 key,Value를 Set에 넣고 iterator에 값으로 Set 정보를 넣는다.
//Interator itr = map.entrySet().interator() 와 같다.
Set<Map.Entry<String, Integer>> set = map.entrySet();
Iterator<Map.Entry<String, Integer>> itr = set.iterator();
while (itr.hasNext()) {
    Map.Entry<String, Integer> e = itr.next();
    System.out.println(e.getKey() + " : " + e.getValue());
}
/* 단순하게 */
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}


//entrySet().iterator()
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Map.Entry<String, Integer> entry = entries.next();
    System.out.println(entry.getKey() + " : " + entry.getValue());
}
		
//keySet().iterator()
Iterator<String> keys = map.keySet().iterator();
while(keys.hasNext()){
    String key = keys.next();
    System.out.println(key + " : " + map.get(key));
}

 

 

 

 

 

 

 

TreeMap<Integer, String> tm = new TreeMap<Integer, String>();

// put() 메소드를 이용한 요소의 저장
tm.put(30, "삼십");
tm.put(10, "십");
tm.put(40, "사십");
tm.put(20, "이십");

// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
System.out.println("맵에 저장된 키들의 집합 : " + tm.keySet());
for (Integer key : tm.keySet()) {
    System.out.println(String.format("키 : %s, 값 : %s", key, tm.get(key)));
}

// remove() 메소드를 이용한 요소의 제거
tm.remove(40);

// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<Integer> keys = tm.keySet().iterator();
while (keys.hasNext()) {
    Integer key = keys.next();
    System.out.println(String.format("키 : %s, 값 : %s", key, tm.get(key)));
}

// replace() 메소드를 이용한 요소의 수정
tm.replace(20, "twenty");


// size() 메소드를 이용한 요소의 총 개수
tm.size();

 

 

 

728x90
반응형

+ Recent posts