ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 step12 - UtilClass(HashMap, Map, HashSet 객체) - 5
    Java 2022. 11. 15. 19:00

     

    HashMap

    package test.main;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Scanner;
    
    public class MainClass09 {
    	public static void main(String[] args) {
    		HashMap<String, String> dic=new HashMap<>();
    		dic.put("house", "집");
    		dic.put("phone", "전화기");
    		dic.put("car", "자동차");
    		dic.put("pencil", "연필");
    		dic.put("eraser", "지우개");
    	
    		/*
    		 *  검색할 단어를 입렵하세요: house
    		 *  house 의 뜻은 집입니다.
    		 *  
    		 *  검색할 단어를 입력하세요: gura
    		 *  gura 는 목록에 없습니다.
    		 */
    	
    		Scanner scan=new Scanner(System.in);
    		System.out.print("검색할 단어를 입력하세요:");
    		String line=scan.nextLine();
    
    		// 만일 HashMap 객체가 입력한 line 을 key 값으로 가지고 있다면
    		if(dic.containsKey(line)) {
    			System.out.println(line+"의 뜻은 "+dic.get(line)+"입니다.");
    		} else {
    			System.out.println(line+"은(는) 목록에 없습니다.");
    		}
    
    	}
    }
    
    
    <console>
    검색할 단어를 입력하세요:house
    house의 뜻은 집입니다.
    
    검색할 단어를 입력하세요:gura
    gura은(는) 목록에 없습니다.

    HashMap 객체는 <> 안에 key, value 형식으로 들어가기 때문에 무슨 타입이 들어가는지 선언해 주어야 한다.

    new HashMap<> 안은 생략 가능하다.

    put() 메소드로 key, value 값을 넣을 수 있고, key값으로 value값을 호출할 수 있다.

    if 문 안에 조건으로 containsKey() 메소드가 적혀있는데 이 함수는 맵에서 키 값이 있는지 확인하는 함수이다.

    벨류값이 있는지 확인하는 함수로 containsValue도 있다 True, False 로 반환한다.

    get() 메소드로 key값의 value값을 가져올 수 있다.

     

     

    Map

    package test.main;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class MainClass10 {
    	public static void main(String[] args) {
    		/*
    		 * 	회원정보는 숫자(int), 문자(String) 으로 구성 되어 있기 때문에
    		 * 	value 의 generic 은 Object 로 지정해야 한다.
    		 */
    		Map<String, Object> map=new HashMap<>();
    		// value 의 generic 이 Object 이기 때문에 어떤 type 이든지 담을 수 있다.
    		map.put("num", 1);
    		map.put("name", "김구라");
    		map.put("addr", "노량진");
    		
    		// Object type 으로 리턴되기 때문에 원래 type 으로 casting 해주어야 한다.
    		int num=(int)map.get("num");
    		String name=(String)map.get("name");
    		String addr=(String)map.get("addr");
    	}
    }
    
    
    <console>

    HashMap은 Map을 인터페이스를 통해 구현한 구현체로 위와 같은 형태의 객체 생성 가능하다.위의 예문을 보면 Map 객체에 저장할 타입으로서 int와 String 타입이 존재하므로 <>안에는 String(변수명 타입), Object(저장할 값의 타입) 이 들어간다.마찮가지로 put()메소드를 활용해 값을 저장하고 있다.값을 호출하여 그 값을 다시 변수명에 넣어야 할 경우에는 Object 타입으로 저장되었기 때문에 다시 원래의 타입으로 casting 해 주어야 한다. 

     

     

    HashSet

    package test.main;
    
    import java.util.HashSet;
    import java.util.Set;
    /*
     * 	HashSet 은 Set 인터페이스를 구현한 클래스이다.
     * 	
     * 	- 순서가 없다.
     * 	- key 값도 없다.
     * 	- 중복을 허용하지 않는다.
     * 	- 어떤 data 를 묶음(집합) 으로 관리하고자 할 때 사용한다.
     */
    public class MainClass11 {
    	public static void main(String[] args) {
    		
    		Set<Integer> set1=new HashSet<>();
    		set1.add(10);
    		set1.add(20);
    		set1.add(20);
    		set1.add(30);
    		set1.add(30);
    		
    		// 문자열을 저장할 수 있는 HashSet 객체
    		Set<String> set2=new HashSet<>();
    		set2.add("kim");
    		set2.add("lee");
    		set2.add("park");
    		set2.add("lee");
    		set2.add("park");
    		
    		System.out.println(set1);
    		System.out.println(set2);
    	}
    }
    
    
    <console>
    [20, 10, 30]
    [lee, kim, park]

    HashSet 은 Set 인터페이스를 구현한 클래스이다. - 순서가 없다.
     - key 값도 없다.
     - 중복을 허용하지 않는다.
     - 어떤 data 를 묶음(집합) 으로 관리하고자 할 때 사용한다.

     

     

     

    HashMap과 HashSet의 차이점은 크게 아래 6가지로 나눌 수 있다.

    1. 정의

    HashMap Map 인터페이스의 구현체로, HashTable과 유사한 자료구조로 데이터를 저장한다.

     

    HashSet Set 인터페이스의 구현체로, 내부적으로 HashMap을 사용하기 때문에 HashTable과 유사한 자료구조로 데이터를 저장한다.

     

    2. 데이터 저장 형태

    HashMap Key-Value 쌍 형태로 데이터를 저장하며, Key와 Value의 mapping을 유지하고 있다.

     

    HashSet 객체 그 자체를 저장한다.

    위에서 HashMap을 내부적으로 사용한다고 했는데,

    Key 값으로는 삽입되는 객체 그 자체를, Value 값으로는 HashSet 내부 구현 코드에서 미리 선언해둔 dummy 객체를 사용한다.

     

    3. 중복 허용 여부

    HashMap은 중복 Key 값을 허용하지 않지만, 중복 Value 값은 허용한다.

    ex. {'a': 1, 'b': 1, 'c': 2}

     

    HashSet은 객체 자체를 데이터로 저장하기 때문에 중복을 허용하지 않는다.

    ex. {'a', 'b', 'c'}

     

    4. NULL 허용 여부

    HashMap (중복 Key 값을 허용하지 않기 때문에) 단 하나의 NULL 값을 Key 값으로 가질 수 있고, 여러 NULL 값을 Value 값으로 가질 수 있다.

     

    HashSet 단 하나의 NULL 값을 가질 수 있다.

     

    5. 데이터 삽입 방법

    HashMap은 put() 메서드를 사용하여 데이터를 삽입하는데, Key-Value 쌍 데이터의 형태를 저장하기 때문에

    삽입 연산 동안 단 하나의 객체가 생성된다.

     

    HashSet은 add() 메서드를 사용하여 데이터를 삽입하는데,

    객체 그 자체를 저장하고 내부적으로 HashMap을 사용하기 때문에 삽입되는 객체(Key값) dummy 객체(Value 값),

     두 개의 객체가 삽입 연산 동안 생성된다.

     

    성능

    HashMap이 HashSet보다 빠르다.

    그래서 데이터의 유일함(Uniqueness)을 유지하기 위해 항상 HashMap이 HashSet보다 선호된다.

     

     

    HashMap과 HashSet의 차이점 출처 : https://siahn95.tistory.com/entry/Java%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-HashMap-HashSet-%EC%9D%B4%EB%9E%80-5-HashMap-vs-HashSet#--%--%EB%-D%B-%EC%-D%B-%ED%--%B-%--%EC%--%BD%EC%-E%--%--%EB%B-%A-%EB%B-%--

     

    댓글

Designed by Tistory.