본문 바로가기
JAVA/[JAVA] 바구니

[JAVA] Map Colletion

by oncerun 2020. 5. 3.
반응형

 

Map Colletion

 

key와 value로 구성된 Map.Entry 객체로 표현하여 저장하는 구조이며 키와 값은 모두 객체입니다.

즉 키와 값이 객체를 참조한다는 이야기입니다.

키는 값을 대표하므로 중복될 수 없으며 값은 중복해 저장할 수 있습니다.

 

 

구현 클래스

 

  • HashMap

  • Hashtable

  • LinkedHashMap

  • Properties

  • TreeMap

주요 메서드

V :value

K : key

기능

메서드

설명

객체 추가

V put(K key, V value)

주어진 키와 값을 추가하며 저장되면 값을 리턴합니다.

객체 검색

boolean containsKey(Object key)

주어진 키가 있는지 여부

boolean containsValue(Object value)

주어진 값이 있는지 여부

Set <Map.Entry <K, V>>entrySet()

키와 값의 쌍으로 구성된 모든 Map.Entry객체를 set에 담아서 리턴

V get(Object key)

주어진 키의 값을 리턴

boolean isEmpty

컬렉션이 비어있는지 여부

int size()

저장된 키의 총 수를 리턴

Collection <V> values()

저장된 모든 값 Collection에 담아서 리턴

객체 삭제

void clear()

모든 Map.Entry(키와 값)을 삭제

V remove(Object key)

주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴

 

Map Colletion에 저장된 전체 객체를 대상으로 반복해서 얻는 방법.

 

1. keySet() 이용

 

키값만 가져온다

 

Set <K> keySet = map.keySet();

Iterator <K> keyIterator = keySet.iterator();

while(keyIterator.hasNext()){

K key = keyIterator.next();

V value = map.get(key);

}

 

2. entrySet() 이용

 

키와 값 전부를 가져온다.

 

Set <Map.Entry <K, V>> entrySet = map.entrySet();

Iterator <Map.Entry <K, V>> entryIterator = entrySet.iterator();

while(entryIterator.hasNext()){

Map.Entry <K, V> entry = entryIterator.next();

K key = entry.getKey();

V value = entry.getValue();

}

 

 

HashMap

 

Map interface를 구현한 HashMap

 

Map < K , V > map  = new HashMap < K , V >();

 

키 객체는  hashCode()와 equals()를 재정의해서 동등 객체가 될 조건을 정해야 한다.

보통 키 타입은 String을 많이 사용한다

String은 문자열이 같을 경우 동등 객체가 될 수 있도록 hashCode()와 equals() 메서드가  재정의가 되어있기 때문이다.

 

 

 

 

빨이라는 key값은 동등 객체로 취급되므로 총개수가 3개로 되며  마지막 빨을 저장한 값만 저장이 됐다.

 

 

이번에는 keySet() 메서드를 이용해 키와 값을 출력합니다.

 

이번에는 entrySet() 메서드를 이용해 키와 값을 가져오며 "주" String키값을 삭제한 뒤 출력합니다.

 

 

동등 키값이 될 때 저장이 되지 않는 예제

 

키로 사용될 객체의 이름은 Student입니다.

package hashmap;

import java.util.Objects;

public class Student {


private int sno;
private String name;

public Student(int sno, String name) {
this.sno = sno;
this.name = name;
}

@Override
public boolean equals(Object obj) {

if(obj instanceof Student) {
Student student = (Student) obj;
return sno == student.sno && name.equals(student.name);

}else
return false;
}


@Override
public int hashCode() {
return Objects.hash(sno,name);
}
}

 

두 개의 서로 다른 객체를 만들었지만 

Student 클래스에서 hashcode() 메서드와 equals() 메서드를 재정 의했기 때문에

동등 객체가 되어 밑에 업데이트된 값이  저장됩니다.

 

 

Hashtable

 

Map < K , V > map  = new Hashtable < K , V >();

 

특징

키 객체는 hashCode()와 equals()를 재정의해서 동등 객체가 될 조건을 정해야 한다.

 

Hashtable은 스레드 동기화가 되어 있기 때문에 list의 vector와 같다.

복수의 스레드가 동시에 Hashtable에 접근해서 객체를 추가, 삭제하더라도 스레드에 안전합니다.

 

package hashmap;

import java.util.Hashtable;
import java.util.Map;
import java.util.Scanner;

public class HashtableProgram {

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Map<String, String> map = new Hashtable<String, String>();

map.put("spring", "1");
map.put("summer", "12");
map.put("fall", "123");
map.put("winter", "124");

while (true) {
System.out.println("아이디 비밀번호입력");
System.out.println("아이디");
String id = scan.nextLine();

System.out.println("비밀번호");
String pwd = scan.nextLine();

if (map.containsKey(id)) {
if (map.get(id).equals(pwd)) {
System.out.println("로그인 성공");
break;
} else {
System.out.println("로그인 실패");
}
}else {
System.out.println("id가 존재하지 않습니다.");
}
}

}

}

 

 

 

Properties

 

키와 값을 String으로 제한한 Map 컬렉션입니다.

Properties는. properties 파일을 읽어 들일 때 주로 사용한다.

 

. properties 파일

옵션 정보, 데이터베이스 연결 정보, 국제화 정보를 기록한 텍스트 파일로 활용합니다.

애플리케이션에서 주로 변경이 잦은 문자열을 저장해서 유지 보수를 편리하게 만들어줍니다.

 

database.properties 파일 예시

키 와 값으로 구성됩니다.

driver = oracle.jdbc.OracleDriver
url = jdbc:oracle:thin:@localhost:1521:once
username = scott
password = tiger

키와 값이 = 기호로 연결되어있는 텍스트 파일로 ISO 8859-1 문자셋으로 저장됩니다.

한글은 유니코드로 변환되어 저장됩니다.

각 한글의 한글자마다 유니코드로 변환해 저장해야 합니다.

 

 

Properties 객체 생성

 

파일 시스템 경로를 이용

Properties properties = new Properties();
properties.load(New FileReader("C:/~/database.properties"));

 

ClassPath를 이용

String path = 클래스.class.getResource("database.properties").getPath();
path = URLDecoder.decode(path, "UTF-8"); //경로에 한글이 있을 경우 한글을 복원
Properties.properties = new Properties();
properties.load(New FileReader(path));

 

해당키로 값 읽기

String value = properties.getProperty("key")

값을 반환합니다.

 

 

예제

 

클래스 파일과 동일한 경로에 properties파일이 존재할 경우

저장된 키값을 얻어 출력하는 예제입니다.

 

반응형

'JAVA > [JAVA] 바구니' 카테고리의 다른 글

[JAVA] String Class  (0) 2020.05.08
[JAVA] Arrays 클래스  (0) 2020.05.07
[JAVA] Set Collection  (0) 2020.05.02
[JAVA] List Collection  (0) 2020.04.28
[JAVA] Collection FrameWork  (0) 2020.04.28

댓글