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 |
댓글