일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- list
- 이클립스
- javascript
- json
- 자바스크립트
- Files
- ArrayList
- string
- table
- vscode
- js
- Java
- html
- windows
- Visual Studio Code
- Maven
- CSS
- Eclipse
- 문자열
- date
- CMD
- 배열
- IntelliJ
- Button
- Array
- 테이블
- 인텔리제이
- input
- 이탈리아
- 자바
- Today
- Total
어제 오늘 내일
[Java] HashMap에서 최대값/최소값 key, value 찾기 본문
- 반복문
- Collections.max(), Collections.min()
- key 기준 최대값/최소값 찾기
- value 기준 최대값/최소값 찾기
- value 기준 최대값을 가지는 key, value 찾기
1. 반복문
코드
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
public class HashMapMax {
public static void main(String[] args) {
// HashMap 준비
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 5);
map.put(2, 70);
map.put(3, 50);
// Max
Entry<Integer, Integer> maxEntry = null;
// Iterator
Set<Entry<Integer, Integer>> entrySet = map.entrySet();
for (Entry<Integer, Integer> entry : entrySet) {
if (maxEntry == null || entry.getValue() > maxEntry.getValue()) {
maxEntry = entry;
}
}
// Max Key, Value 출력
System.out.println(maxEntry.getKey() + " : " + maxEntry.getValue()); // 2 : 70
}
}
반복문을사용하여
Map의 Entry를 포함하는 Set을 순회하면서
value를 max value와 직접 비교하면서 max value를 가지는 key와 value를 찾았습니다.
2. Collections.max(), Collections.min()
public static T max(Collection<? extends T> coll)
public static T max(Collection<? extends T> coll, Comparator<? super T> comp)
public static T min(Collection<? extends T> coll)
public static T min(Collection<? extends T> coll, Comparator<? super T> comp)
Collections.max(), Collections.value() 를 이용하면
HashMap의 최대값, 최소값을 가지는 value, key를 찾을 수 있습니다.
2번째 파라미터로 Comparator를 정의해주면,
Comparator에 정의한 대로 max를 찾아줍니다.
2. 1. key 기준 최대값/최소값 찾기
코드
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class HashMapMax {
public static void main(String[] args) {
// HashMap 준비
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 5);
map.put(2, 70);
map.put(3, 50);
// Max Key
Integer maxKey = Collections.max(map.keySet());
// Min Key
Integer minKey = Collections.min(map.keySet());
// 결과 출력
System.out.println(maxKey); // 3
System.out.println(minKey); // 1
}
}
Integer maxKey = Collections.max(map.keySet());
Integer minKey = Collections.min(map.keySet());
파라미터로 Map의 key를 모아놓은 Set객체를 전달하였습니다.
Collections.max()는 전달받은 Set에서 가장 큰 값을 찾아서 리턴합니다.
Collections.min()은 전달받은 Set에서 가장 작은 값을 찾아서 리턴합니다.
가장 크거나 작은 key값을 찾았습니다.
2. 2. value 기준 최대값/최소값 찾기
코드
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class HashMapMax {
public static void main(String[] args) {
// HashMap 준비
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 5);
map.put(2, 70);
map.put(3, 50);
// Max Value
Integer maxValue = Collections.max(map.values());
// Min Value
Integer minValue = Collections.min(map.values());
// 결과 출력
System.out.println(maxValue); // 70
System.out.println(minValue); // 5
}
}
Integer maxValue = Collections.max(map.values());
Integer minValue = Collections.min(map.values());
Collections.max() / Collections.min()에 Map의 value들을 담은 Set을 전달하였습니다.
가장 크거나 작은 value 값을 찾아서 출력하였습니다.
2. 3. value 기준 최대값을 가지는 key, value 찾기
public static T max(Collection<? extends T> coll, Comparator<? super T> comp)
public static T min(Collection<? extends T> coll, Comparator<? super T> comp)
Collections.max(), Collections.min() 메소드의 2번째 파라미터로
compare() 메소드를 정의한 Comparator 객체를 넘겨주면,
compare() 메소드에 정의한 기준으로 Collection의 대소를 비교하여,
최대값, 최소값을 찾아서 해당 Collection 객체를 리턴해줍니다.
코드
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class HashMapMax {
public static void main(String[] args) {
// HashMap 준비
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 5);
map.put(2, 70);
map.put(3, 50);
// Comparator 정의
Comparator<Entry<Integer, Integer>> comparator = new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> e1, Entry<Integer, Integer> e2) {
return e1.getValue().compareTo(e2.getValue());
}
};
// Max Value의 key, value
Entry<Integer, Integer> maxEntry = Collections.max(map.entrySet(), comparator);
// Min Value의 key, value
Entry<Integer, Integer> minEntry = Collections.min(map.entrySet(), comparator);
// 결과 출력
System.out.println(maxEntry.getKey() + " : " + maxEntry.getValue()); // 2 : 70
System.out.println(minEntry.getKey() + " : " + minEntry.getValue()); // 1 : 5
}
}
Comparator<Entry<Integer, Integer>> comparator = new....
위 코드에서는 먼저 Comparator 객체를 생성하였습니다.
위 Comparator 객체는 compare() 메소드를 Override하여,
Map.Entry 객체의 value 값을 비교하여,
e1.getValue()값이 e2.getValue()보다 크면 양수를,
e1.getValue()값이 e2.getValue()보다 작으면 음수를,
같으면 0을 리턴합니다.
만약, key값으로 비교를 하고 싶다면,
e1.getValue(), e2.getValue() 대신 e1.getKey(), e2.getKey()를 사용하여 비교하면 되겠죠?
Collections.max(map.entrySet(), comparator);
Collections.mix(map.entrySet(), comparator);
Collections.max(), Collections.min() 메소드를 호출하면서
첫번째 파라미터로 Entry들의 Set을 전달하고,
두번째 파라미터로 앞에서 생성한 comparator 객체를 전달하였습니다.
HashMap의 최대값과 최소값을 찾는 다양한 방법을 알아보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] Map을 배열, List, Set으로 변환하기 (0) | 2021.05.19 |
---|---|
[Java] ArrayList를 HashMap으로 변환하기 (0) | 2021.05.19 |
[Java] HashMap에서 value로 key 찾기 (2) | 2021.05.18 |
[Java] HashMap에 특정 value 존재 여부 확인하기 (0) | 2021.05.18 |
[Java] HashMap에 특정 key 존재 여부 확인하기 (0) | 2021.05.18 |