HashMap ?
HashMap은 Map 인터페이스를 구현한 Map 컬렉션이다. 인터페이스를 상속하기 때문에 Map의 특성을 그대로 사용할 수 있다. Key-Value쌍의 데이터로 저장되는 구조를 갖고 있고 이 데이터는 모두 객체이다. 값은 중복될 수 있지만 key값은 고유한 값을 가져야 한다. 만약 이미 존재하는 key값과 동일한 key값을 put하게 되면 새로운 key값으로 교체된다.
우리는 자주 HashMap을 사용한다. key-value 쌍의 데이터를 표현하기 위해서이기도 하고, 자연스럽게 중복을 원하지 않는 key-value 알고리즘을 사용해야 할 때 주로 사용한다.
LinkedHashMap ?
HashMap은 위와 같은 특징을 갖고 있다. 하지만 한 가지 더 추가하자면 아래 사진과 같이 데이터 출력에 있어 순서를 보장하지 않는다는 것이다.
1
2
3
4
5
6
7
8
9
10
11
|
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("apple", "빨강");
hm.put("banana","노랑");
hm.put("kiwi", "초록");
System.out.println(hm.entrySet());
System.out.println(hm.keySet());
System.out.println(hm.values());
}
|
cs |
알고리즘 문제나 로직을 짜다보면 가끔 순서가 보장되는 HashMap이 필요한 상황이 온다. 그럴 때 사용하는 것이 LinkedHashMap이다.
1
2
3
4
5
6
7
8
9
10
|
public static void main(String[] args) {
LinkedHashMap<String, String> lhm = new LinkedHashMap<String, String>();
lhm.put("apple", "빨강");
lhm.put("banana","노랑");
lhm.put("kiwi", "초록");
System.out.println(lhm.entrySet());
System.out.println(lhm.keySet());
System.out.println(lhm.values());
}
|
cs |
위 사진과 같이 LinkedHashMap을 이용하면 ArrayList와 같이 또는 Array와 같이 사용할 수 있으면서 HashMap의 장점을 그대로 사용할 수 있다.
**추가적으로 LinkedHashMap에서는 removeEldestEntry()라는 메소드를 오버라이드해서 사용할 수 있다.**
removeEldestEntry - 이름과 같이 가장 오래된 Entry를 지우는 것인데, 사용방법은 아래와 같이 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public static void main(String[] args) {
LinkedHashMap<String, String> lhm = new LinkedHashMap<String, String>(){
@Override
protected boolean removeEldestEntry(Entry<String, String> eldest) {
return size() == 3 ? true : false;
}
};
lhm.put("apple", "빨강");
lhm.put("banana","노랑");
lhm.put("kiwi", "초록");
System.out.println(lhm.entrySet());
System.out.println(lhm.keySet());
System.out.println(lhm.values());
}
|
cs |
size() - hm.size(); 할 때 그 size()이다. 오버라이드 했기 때문에 size()로 사용할 수 있다.
size() == 3 ? true : flase - 삼항연산자, size()가 3일 때 true를 반환한다. true를 반환한 순간부터 가장 오래된 데이터를 삭제하고 새로 입력되는 데이터를 put한다. ex) 초록을 put하는 시점에 lhm은 size()가 3이 되고 그 순간 가장 오래된 "빨강"이라는 데이터를 삭제하는 것이다.
'프로그래밍 언어 > JAVA(자바)' 카테고리의 다른 글
[자바/java] Set, HashSet 사용법 데이터 삽입, 삭제, 출력 (0) | 2020.09.01 |
---|---|
[자바/java] Arrays.fill()을 이용한 int[] 배열 , 이차원 배열 값 채우기 (0) | 2020.08.30 |
[자바/java] int[] 배열 내림차순 정렬 (Integer[] 배열없이) (0) | 2020.05.21 |
[자바/java] Arrays.stream을 이용해 배열 최소값 찾고 응용해보기 (0) | 2020.05.06 |
[자바/java] int[] 배열을 Integer[] 배열로 변환 (반대 과정 포함/내림차순 정렬) (0) | 2020.05.05 |