-
자바 step12 - UtilClass(HashMap, Map, HashSet 객체) - 5Java 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-%--
'Java' 카테고리의 다른 글
자바 step12 - UtilClass(반복문 while 문) 1 (0) 2022.11.15 자바 step12 - UtilClass(ArrayList 객체) - 4 (0) 2022.11.08 자바 step12 - UtilClass(ArrayList 객체) - 3 (0) 2022.11.08 자바 step12 - UtilClass(ArrayList 객체) - 2 (0) 2022.11.08 자바 step12 - UtilClass(ArrayList 객체) (0) 2022.11.07