프로그래밍/java

[자바 /Java] Map 인터페이스 (HashMap / Properties)

pupu91 2022. 9. 7. 19:51
반응형

Map

- Collection 인터페이스와는 다른 저장 방식을 가짐

- key와 value를 하나의 쌍으로 저장하는 방식 사용

- 구현 클래스 :  HashMap, HashTable, TreeMap

HashTable은 하위 호환을 남겨 놓았기 때문에

HashMap을 사용하는 것이 좋음

 

 


 

Map특징

1)  요소의 저장 순서를 유지 하지 않음

2) key는 중복 저장 허용x, 값은 중복 저장 가능

3) key가 중복되는 경우 기존에 있는 key에 해당하는 value을 덮어 씀

 

 

 

Map 계열 주요 메소드

 

 

 


HashMap

: key와 value을 묶어서 하나의 데이터(entry)로 저장

  hashing을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 성능이 뛰어남

 

 


 

 

1 . HashMap 객체 생성(test를 위해 제네릭없이 생성)

Map hmap = new HashMap();

 

 

put() 메소드로 key와 value 쌍으로 저장하기

: 둘 다 반드시 객체여야함. 기본 자료형으로 입력해도 저장하면서 오토박싱 됨

hmap.put("one", new Date());
hmap.put(12, "red apple");
hmap.put(33, 123);

System.out.println("hmap : " + hmap);

출력 결과
hmap : {33=123, one=Wed Sep 07 19:27:39 KST 2022, 12=red apple}
=> 저장 순서 유지 되지 않음

 

 

 

 

중복된 key값

: 키는 중복 저장 되지 않으므로 최근 값으로 덮어쓰기 됨(set 방식)

hmap.put(12,  "yellow banana");
System.out.println("hmap : " + hmap);

출력 결과
hmap : {33=123, one=Wed Sep 07 19:27:39 KST 2022, 12=yellow banana}

 

 

 

 

중복된 value값

: 키가 다르면 값 객체 저장은 중복으로 가능(list 방식)

hmap.put(11, "yellow banana");
System.out.println("hmap : " + hmap);

출력 결과
hmap : {33=123, one=Wed Sep 07 19:27:39 KST 2022, 11=yellow banana, 12=yellow banana}

 

 

 

 

key 값을 가지고 value 값 가져오기

:ArrayList는 인덱스 값을 넘기지만, HashMap은 key값을 넘겨서 value값을 반환

System.out.println("키 11에 대한 객체 : " + hmap.get(11)); 

출력 결과
키 11에 대한 객체 : yellow banana

 

 

 

 

key 값을 가지고 삭제 처리

hmap.remove(11);
System.out.println("hmap : " + hmap);

출력 결과
hmap : {33=123, one=Wed Sep 07 19:27:39 KST 2022, 12=yellow banana}

 

 

 

저장 된 객체 수 확인

System.out.println("hmap 저장 된 객체 수 : " + hmap.size());

출력 결과
hmap 저장 된 객체 수 : 3

 

 

 

 

2. 제네릭 설정한 HashMap 객체 생성

: HashMap 제네릭 설정은 key타입과 value타입 둘다 지정해주어야 함

  보편적으로 key타입은 string으로 사용

HashMap<String, String> hmap2 = new HashMap<>();

 

 

 

put() 메소드로 key와 value 값 저장하기

hmap2.put("one", "java");
hmap2.put("two", "oracle");
hmap2.put("three", "jdbc");
hmap2.put("four", "html");
hmap2.put("five", "css");

System.out.println(hmap2);

출력 결과
{four=html, one=java, two=oracle, three=jdbc, five=css}

 

 

 

 

keySet()을 이용해서 키만 따로 Set으로 만들고, iterator로 키에 대한 목록 만들기

Set<String> keys = hmap2.keySet();
Iterator<String> keyIter = keys.iterator();
=> 맵은 iterable를 상속 받고 있는 컬렉션을 상속받고 있지 않기 때문에 iterator를 사용하기 위해서는
   map을 set타입으로 변경 후 사용해야 함
   
        while(keyIter.hasNext()){
            String key = keyIter.next();
            String value = hmap2.get(key); hashmap의 키값을 전달해서 꺼내오는 벨류값을 저장
            System.out.println(key + " = " + value);
        }

출력결과
four = html
one = java
two = oracle
three = jdbc
five = css

 

 

 

 

enrySet()을 이용해서 Entry(key,valeu)를 Set으로 만들고, iterator로 Entry에 대한 목록 만들기

Set<Entry<String, String>> set = hmap2.entrySet();
Iterator<Entry<String, String>> entryIter = set.iterator();

		while(entryIter.hasNext()) {
			Entry<String, String> entry = entryIter.next();
			System.out.println(entry.getKey() + " = " + entry.getValue());
		}

출력결과
four = html
one = java
two = oracle
three = jdbc
five = css

 

 

 

 

저장된 value 객체들만 values로 Collection으로 만들기

hmap2.values();
Collection<String> values = hmap2.values();
Iterator<String> valueIter = values.iterator();

	while(valueIter.hasNext()){
    	System.out.println(valueIter.next());
    }
    
출력 결과
html
java
oracle
jdbc
css

 

 

 


Properties

설정 파일의 값을 읽어서 어플리케이션에 적용할 때 사용

key와 vlaue를 String 타입으로 제한

프로퍼티(*.properties)파일을 읽어 들일 때 주로 사용

 

 


 

프로퍼티(*.properties)파일

- 옵션정보, 데이터베이스 연결정보, 국제화(다국어)정보를 기록하여 텍스트 파일로 활용

- 애플리케이션에서 주로 변경이 잦은 문자열을 저장하여 관리하기 때문에 유지보수를 편리하게 만들어 줌

- 키와 값이 ‘=‘기호로 연결되어 있는 텍스트 파일로 ISO 8859-1 문자셋으로 저장되고, 한글은 유니코드(Unicode)로 변환      되어 저장

 

 

 

 

Properties 메소드

반응형