Map
- interface
- Key Value로 구성된 Entry객체를 저장하는 구조
- Key는 중복값 불가능, Value는 중복값 가능
- 구현 클래스 : Hashtable, HashMap, LinkedHashMap, SortedMap, TreeMap, Properties
Map.Entry
interface Map.Entry<K,V>
- Map에 저장된 하나의 K,V 쌍
entry.getKey() -> K
entry.getValue() -> V
methods
put(K,V) -> V
: 기존에 K로 저장된 값 있으면 반환
putAll(Map) -> void
get(K) -> V
: 키로 값 검색, 없으면 null
getOrDefault(K,V) -> V
: 키로 값을 검색, 없으면 리턴할 기본값 지정
containsKey(K) -> boolean
: 키 존재 여부
containsValue(V) -> boolean
: 값 존재
entrySet() -> Set<Map.Entry<K,V>>
: 저정된 모든 키값 쌍을 Map.Entry 객체로 담고 있는 Set 반환
keySet() -> Set<K>
values() -> Collection<V>
size() -> int
: 요소 개수
lambda를 받는 함수
compute(K key, BiFunction<K,V,V> func) -> V
computeIfAbsent(K key, Function<K,V> f) -> V
computeIfPresent(K key, BiFunction<K,V,V> f) -> V
merge(K key, V value, BiFunction<V,V,V> f) -> V
forEach(BiConsumer<K,V> action) -> void
replaceAll(BiFunction<K,V,V> f) -> void
map.compute("banana", (k, v) -> v + 1);
map.computeIfAbsent("banana", k-> 10);
map.computeIfPresent("banana",(k,v) -> v*10);
map.merge("banana",10,(oldVal,newVal)-> {
System.out.println(oldVal);
System.out.println(newVal);
return oldVal+newVal;
});
map.forEach((k,v)->{});
map.replaceAll((key,value)->{
return value*2;
});
반복문
keySet()
메서드로 가져온 key들로 get(K)
메서드 호출해 요소 가져오기
entrySet()
메서드로 모든 Map.Entry 가져와서 getKey(), getValue()
메서드 호출하기
V 타입으로 Collection 사용하기
Map<String,List<Integer>> map = new HashMap();
if(map.containsKey(str)==false){
List<Integer> list = new ArrayList();
map.put(str,list);
}
HashMap
- key로는 주로 "대문자" 혹은 "소문자" 로만 구성된 문자열을 이용
constructor
HashMap()
HashMap(int capacity, float loadFactor)
methods
삭제
clear() -> void
: 모든 객체 제거
remove(Object key) -> Object
: key가 일치하는 Entry 제거하고, 제거된 value 반환
검사, 조회
containsKey(Object key) -> boolean
: key 존재여부
containsValue(Object value ) -> boolean
: value 존재여부
isEmpty() -> boolean
size()-> int
get(Object key) -> Object
: key에 해당하는 value, 없으면 null
getOrDefault(Object key, Object default) -> Object
: 없으면 default
변환
entrySet() -> Set<Map.Entry<K,V>>
: HashMap에 저장된 키 + 값을 Entry 형태로 반환
keySet() -> Set<K>
: Key가 저장된 Set 반환, 중복 없음
values() -> Collection
: value만 Collection에 담아서 반환, 중복가능
삽입
put(Object key, Object value) -> Object
: 키와 값을 저장, 이미 존재하면 덮어써짐, 이전값 반환
putAll(Map m) -> void
: Map 에 저장된 모든요소를 저장
변경
replace(Object key, Object value) -> Object
: key에 해당하는값 존재하면, 새로운 값으로 대체, 이전값 반환
replace(Object key, Object oldval, Object newval) -> boolean
: 키-값이 같으면 새로운값 저장
복사
clone() -> Object
// HashMap을 복제
lambda를 받는 메서드
compute(K key, BiFunction<? super K,? super V,? extends V> mapper) -> V
computeIfAbsent(K,Function<K,V> mapper) -> V
: key가 존재하지 않는 경우 추가
computeIfPresent(K,BiFunction<K,V,V> remapper) -> V
merge(K,V,BiFunction<V,V,V>) -> V
HashMap<String,Integer> map = new HashMap<>();
map.put("Java",1);
map.put("JavaScript",2);
map.put("Python",3);
map.computeIfPresent("Java",(String k,Integer v)->++v);
TreeMap
- Tree구조로 구현되어 정렬과 검색기능 강화
- Map.Entry가 key 값을 기준으로 정렬
Entry
class Entry<K,V> implements Map.Entry<K,V>
- TreeMap에서 하나의 Node를 나타내기 위해 사용
static final class Entry<K,V> implements Map.Entry<K,V> {
K key;
V value;
Entry<K,V> left;
Entry<K,V> right;
Entry<K,V> parent;
boolean color = BLACK;
}
methods
firstEntry() -> Map.Entry<K,V>
: 가장 작은 key값의 Entry
lastEntry() -> Map.Entry<K,V>
: 가장 큰 key 값의 Entry
pollFirstEntry() -> Map.Entry<K,V>
: key값 가정 작은 엔트리 삭제하고, 가져오기
pollLastEntry() -> Map.Entry<K,V>
: key값 가장큰 엔트리 삭제하고, 가져오기
ceilingEntry(k) -> Map.Entry<K,V>
: k와 같거나, 큰 키중 가장 작은키의 Entry
floorEntry(k) -> Map.Entry<K,V>
: k와 같거나, 더 작은 키중 가장 큰키의 Entry
lowerEntry(K) -> Map.Entry<K,V>
higherEntry(K) -> Map.Entry<K,V>
ceilingKey(K) -> K
descendingKeySet() -> NavigableSet<K>
descendingMap() -> NavigableMap<K,V>
headMap(K toKey, boolean inclusive) -> NavigableMap<K,V>
: smallest ~ toKey 까지 정렬
tailMap(K fromKey, boolean inclusive) -> NavigableMap<K,V>
: fromKey ~ largest 까지 정렬
subMap(K fromKey, boolean, K toKey, boolean) -> NavigableMap<K,V>
NavigableMap
Hashtable
Properties
.properties
확장자 파일 나타내는 class
Hashtable
의 하위 클래스
methods
load(FileReader fr)
: properties 파일의 filereader 객체를 전달해 파일 로딩
get(String key) -> Object
: 값을 Object 타입으로 리턴하므로 강제 타입변환 필요
getProperty(String key) -> String
: 값을 String 타입으로
Properties pro = new Properties();
pro.load(new FileReader("path/to/application.properties"));