공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

 

 

 

HashMap과 Hashtable

키(key) : 컬렉션 내에서 유일한 값
값(value) : 값의 중복을 허용

( Hashtable   HashMap 의 구버전이고  Hashtable 보다는  HashMap 을 사용하는 것을 권장한다.)  HashMap  Map 을 구현한 것이므로 키(key)와 값(value)을 묶어서 하나로 저장한다는 특징을 갖는다. 그리고 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 성능이 뛰어나다.  HashMap 은 키와 값이 각각  Object 타입으로 선언되어 있어 어떤 객체도 저장할 수 있지만 키는 주로  String 을 대문자 또는 소문자로 통일해서 사용한다. 키는 저장된 값을 찾는 데 사용되는 것이기 때문에 컬렉션 내에서 유일(unique) 해야 한다.

 

 

생성자 / 메서드 설  명
HashMap( )  HashMap 객체를 생성
HashMap(int initialCapacity) 지정된 값을 초기용량으로 하는  HashMap 생성
HashMap(int initialCapacity, float loadFactor) 지정된 초기용량( initialCapacity)과 load factor의  HashMap 객체를 생성
HashMap(Map m) 지정된  Map 의 모든 요소를 포함하는  HashMap 을 생성
void clear( )  HashMap 에 저장된 모든 객체를 제거
Object clone( ) 현재  HashMap 을 복제해서 반환
boolean containsKey(Object key)  HashMap 에 지정된 ( key )가 포함되어 있는지 알려준다
포함되어 있으면 true
boolean containsValue(Object value)  HashMap 에 지정된 ( value )이 포함되어 있는지 알려준다.
포함되어 있으면 true
Set entrySet( )  HashMap 에 저장된 키와 값을 엔트리(키와 값의 결합)의 형태로  Set 에 저장해서 반환
Object get(Object key) 지정된 키( key )의 값(객체)을 반환. 못찾으면 null 반환
Object getOrDefault(Object key, Object defaultValue) 지정된 키( key )의 값(객체)을 반환한다. 키를 못찾으면, 기본값( defaultValue )으로 지정된 객체를 반환
booelan isEmpty( )  HashMap 이 비어있는지 알려줌
Set keySet( )  HashMap 에 저장된 모든 키가 저장된  Set 을 반환
Object put(Object key, Object value) 지정된 키와 값을  HashMap 에 저장
void putAll(Map m)  Map 에 저장된 모든 요소를  HashMap 에 저장
Object remove(Object key)  HashMap 에서 지정된 키로 저장된 값(객체)을 제거
Object replace(Object key, Object value) 지정된 키의 값을 지정된 객체( value )로 대체
boolean replace(Object key, Object oldValue, Object newValue) 지정된 키와 객체( oldValue )가 모두 일치하는 경우에만 새로운 객체( newValue )로 대체
int size( )  HashMap 에 저장된 요소의 개수 반환
Collection values( )  HashMap 에 저장된 모든 값을 컬렉션의 형태로 반환

 

 

package Example;

import java.util.*;

public class Example {
	public static void main(String[] args) {
		HashMap map = new HashMap();
		map.put("myId", "1234");
		map.put("asdf", "1111");
		map.put("asdf", "1234");
		
		Scanner s = new Scanner(System.in);	//화면으로부터 라인단위로 입력받는다.
		
		while(true) {
			System.out.println("id와 password를 입력해주세요 ");
			System.out.print("id : ");
			String id = s.nextLine().trim();
			
			System.out.print("password : ");
			String password = s.nextLine().trim();
			System.out.println();
			
			if(!map.containsKey(id)) {
				System.out.println("입력하신 id는 존재하지 않습니다." + " 다시 입력해주세요");
				continue;
			} else {
				if(!(map.get(id).equals(password))) {
					System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요");
				
				}else {
					System.out.println("id와 비밀번호가 일치합니다");
					break;
				}
			}
		}
	}
}

 

실행결과

 HashMap 의 특징을 확인하는 예제이다. 실행결과를 보면 아이디  asdf 의 비밀번호가  1234 로 바뀐 것을 확인할 수 있다.

 

중복된 key값이 들어오면 새로 추가되지 않고 기존의 값을 덮어쓴다. 키인  asdf 가 이미 존재하기 때문에 기존의 값이 덮어 씌워진 것을 확인할 수 있다.  Map 의 값은 중복을 허용하지만 키는 중복을 허용하지 않기 때문에 저장하려는 두 데이터 중에서 어느 쪽을 키로 할 것인지를 잘 결정해야 한다.

 

 

 

 

package Example;

import java.util.*;

public class Example {
	static HashMap phoneBook = new HashMap();
	
	public static void main(String[] args) {
		addPhoneNo("친구", "이자바", "010-111-1111");
		addPhoneNo("친구", "김자바", "010-222-2222");
		addPhoneNo("친구", "김자바", "010-333-3333");
		addPhoneNo("회사", "김대리", "010-444-4444");
		addPhoneNo("회사", "김대리", "010-555-5555");
		addPhoneNo("회사", "박대리", "010-666-6666");
		addPhoneNo("회사", "이과장", "010-777-7777");
		addPhoneNo("세탁", "010-888-8888");
		
		printList();

	}
	
	//그룹에 전화번호 추가
	static void addPhoneNo(String groupName, String name, String tel) {
		addGroup(groupName);
		HashMap group = (HashMap)phoneBook.get(groupName);
		group.put(tel, name);	//이름은 중복될 수 있어서 전화번호를 key로 저장
	}
	
	static void addPhoneNo(String name, String tel) {
		addPhoneNo("기타", name, tel);	//그룹입력 안할경우 "기타"그룹으로 기본설정
	}
	
	//그룹추가
	static void addGroup(String groupName) {
		if(!phoneBook.containsKey(groupName))
			phoneBook.put(groupName, new HashMap());
	}
	
	
	
	//전화번호 전체출력
	static void printList() {
		Set set = phoneBook.entrySet();
		Iterator it = set.iterator();
		
		while(it.hasNext()) {
			Map.Entry e = (Map.Entry)it.next();
			
			/*
			HashMap은 데이터(키와 값)를 Object타입으로 저장하기 때문에 HashMap의 값(value)으로 HashMap을 다시 저장할 수 있다.
			 -> 하나의 키에 다시 복수의 데이터를 저장할 수있다.
			*/
			Set subSet = ((HashMap)e.getValue()).entrySet();	
			Iterator subIt = subSet.iterator();
			
			System.out.println(" * " + e.getKey() + " [" + subSet.size() + "] ");
			
			while(subIt.hasNext()) {
				Map.Entry subE = (Map.Entry)subIt.next();
				String telNo = (String)subE.getKey();
				String name = (String)subE.getValue();
				System.out.println(name + " " + telNo);
			}
			
			System.out.println();
		}
	}
}

 

실행결과

 HashMap 은 데이터(키와 값)를  Object 타입으로 저장하기 때문에  HashMap 의 값(value)으로  HashMap 을 다시 저장할 수 있다. 이렇게 하면 하나의 키에 다시 복수의 데이터를 저장할 수 있다.

 

 

 

 

 


TreeMap

 TreeMap 은 이진 검색 트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장한다. 검색과 정렬에 적합한 컬렉션 클래스이다.  HashMap  TreeMap 의 검색 성능에 관한 것인데, 검색에 관한 대부분의 경우에서  HashMap  TreeMap 보다 더 뛰어나므로  HashMap 을 사용하는 것이 좋다. 다만 범위 검색이나 정렬이 필요한 경우에는  TreeMap 을 사용하는 것이 좋다.

 

메 서 드 설  명
TreeMap( )  TreeMap 객체생성
TreeMap(Comparator c) 지정된  Comparator 를 기준으로 정렬하는  TreeMap 객체를 생성
TreeMap(Map m) 주어진  Map 에 저장된 모든 요소를 포함하는  TreeMap 생성
TreeMap(SortedMap m) 주어진  SortedMap 에 저장된 모든 요소를 포함하는  TreeMap 생성
Map.Entry ceilingEntry(Object key) 지정된  key 와 일치하거나 큰 것중 제일 작은 것의 키와 값의 쌍( Map.Entry )을 반환. 없으면 null 반환
Object ceilingKey(Object key) 지정된  key 와 일치하거나 큰 것중 제일 작은 것의 를 반환, 없으면 null 반환
void clear( )  TreeMap 에 저장된 모든 객체를 제거
Object clone( ) 현재  TreeMap 을 복제해서 반환
Comparator comparator( )  TreeMap 의 정렬기준이 되는  Comparator 를 반환
Comparator가 지정되지 않았다면 null을 반환
boolean containsKey(Object key)  TreeMap 에 지정된 ( key )가 포함되어있는지 알려줌
포함되어 있으면 true
boolean containsValue(Object value)  TreeMap 에 지정된 ( value )이 포함되어 있는지 알려줌
포함되어 있으면 true
NavigableSet descendingKeySet( )  TreeMap 에 저장된 키를 역순으로 정렬해서  NavigableSet 에 담아서 반환
Set entrySet( )  TreeMap 에 저장된 키와 값을 엔트리(키와 값의 결합)의 형태로  Set 에 저장해서 반환
Map.Entry firstEntry( )  TreeMap 에 저장된 첫 번째(가장 작은) 키와 값의 쌍( Map.Entry )을 반환
Object firstKey( )  TreeMap 에 저장된 첫 번째(가장 작은) 를 반환
Map.Entry floorEntry(Object key) 지정된  key 와 일치하거나 작은 것 중에서 제일 큰 키의 쌍( Map.Entry )을 반환.
없으면 null 반환
Object floorKey(Object key) 지정된  key 와 일치하거나 작은 것 중에서 제일 큰 를 반환.
없으면 null 반환
Object get(Object key) 지정된 키( key )의 값(객체)을 반환
SortedMap headMap(Object toKey)  TreeMap 에 저장된 첫 번째 요소부터 지정된 범위에 속한 모든 요소가 담긴  SortedMap 을 반환(toKey는 미포함)
NavigableMap headMap(Object toKey, boolean inclusive)  TreeMap 에 저장된 첫 번째 요소부터 지정된 범위에 속한 모든 요소가 담긴  SortedMap 을 반환. inclusive의 값이 true면 toKey도 포함
Map.Entry higherEntry(Object key) 지정된  Key 보다 큰 키 중에서 제일 작은 키의 쌍( Map.Entry )을 반환.
없으면 null 반환
Object higherKey(Object key) 지정된  Key 보다 큰 키 중에서 제일 작은 를 반환. 없으면 null을 반환
boolean isEmpty( )  TreeMap 이 비어있는지 알려줌
Set keySet( )  TreeMap 에 저장된 모든 키가 저장된 Set을 반환
Map.Entry lastEntry( )  TreeMap 에 저장된 마지막 키(가장 큰 키)의 쌍을 반환
Object lastEntry( )  TreeMap 에 저장된 마지막 키(가장 큰 키)를 반환
Map.Entry lowerEntry(Object key) 지정된  key 보다 작은 키 중에서 제일 큰 키의 쌍( Map.Entry )을 반환.
없으면 null 반환
Object lowerKey(Object key) 지정된  key 보다 작은 키 중에서 제일 큰 를 반환, 없으면 null을 반환
NavigableSet navigableKeySet( )  TreeMap 의 모든 키가 담긴  NavigableSet 을 반환
Map.Entry pollFirstEntry( )  TreeMap 에서 제일 작은 키를 제거하면서 반환
Map.Entry pollLastEntry( )  TreeMap 에서 제일 큰 키를 제거하면서 반환
Object put(Object key, Object value) 지정된 키와 값을  TreeMap 에 저장
void putAll(Map map)  Map 에 저장된 모든 요소를  TreeMap 에 저장
Object remove(Object key)  TreeMap 에서 지정된 키로 저장된 값(객체)을 제거
Object replace(Object k, Object v) 기존의 키( k )의 값을 지정된 값( v )으로 변경
boolean replace(Object key, Object oldValue, Object newValue) 기존의 키( key )값을 새로운 값( newValue )으로 변경
단, 기존의 값과 지정된 값( oldValue )가 일치해야함
int size( )  TreeMap 에 저장된 요소의 개수 반환
NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive) 지정된 두 개의 키 사이에 있는 모든 요소들이 담긴  NavigableMap 을 반환. fromInclusive가 true면 범위에 fromKey포함. toInclusive가 true면 범위에 toKey포함
SortedMap subMap(Object fromKey, Object toKey) 지정된 두 개의 키 사이에 있는 모든 요소들이 담긴  SortedMap 을 반환(toKey는 포함되지 않는다.)
SortedMap tailMap(Object fromKey) 지정된 키부터 마지막 요소의 범위에 속한 요소가 담긴  SortedMap 을 반환
NavigableMap tailMap(Object fromKey, boolean inclusive) 지정된 키부터 마지막 요소의 범위에 속한 요소가 담긴  NavigableMap 을 반환.
inclusive가 true면 fromKey포함
Collection values( )  TreeMap 에 저장된 모든 값을 컬렉션의 형태로 반환

 

 

 

'Back end > Java' 카테고리의 다른 글

[Java] Properties, Collections  (0) 2019.07.26
[Java] 해싱(hashing)과 해시함수(hash function)  (0) 2019.07.25
[Java] HashSet, TreeSet  (0) 2019.07.24
[Java] Iterator, Arrays, Comparator  (0) 2019.07.23
[Java] 스택(Stack)과 큐(Queue)  (1) 2019.07.22

+ Recent posts