Map을 이용할 때 key를 오름차순 정렬해서 값을 가져올 수 없을까?
이것을 TreeMap이 해결해준다.
검색 기능을 강화시킨 컬렉션은 TreeSet, TreeMap이 있다.
이진트리구조를 사용하기 때문에 검색 속도가 향상된다.
주요 메소드
단일 노드 객체를 찾는 메소드 : firstEntry(), lastEntry(), lowerEntry(), hightEntry()..
정렬 메소드 : descendingKeySet(), descendingMap()
범위 검색 메소드 : headMap(), tailMap, subMap()
TreeMap은 키를 정렬된 순서로 유지한다. 기본적으로 오름차순이다.
단, TreeMap을 사용할때는 성능 상의 고려사항이 있을 수 있다.
대량의 데이터를 다루는 경우나 빈번한 삽입/삭제가 필요한 경우 다른 구조를 사용하는 것이 좋다.
하지만 정렬된 상태로 Map을 유지하거나 정렬된 데이터를 조회하는 범위검색이 필요한 경우에는 더 좋다.
* key값을 이용해서 value를 찾는 경우 많은 양의 데이터를 가져올때는
keySet()보다는 key와 value 모두 가지고 있는 entrySet()을 이용하자(성능저하방지)
예제)
https://school.programmers.co.kr/learn/courses/30/lessons/120896
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을
return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
public String solution(String s) {
Map<String,Integer> map = new TreeMap<>();
String[] arr = s.split("");
for(String target : arr){
if(map.containsKey(target)){
int count = map.get(target)+1;
map.put(target,count);
}else{
map.put(target,1);
}
}
String answer = "";
for(String key : map.keySet()){
if(map.get(key)==1){
answer += key;
}
}
return answer;
}
if 조건문이 너무 많아서 수정했다.
public static String solution(String s) {
Set<Character> set = new TreeSet<>();
for(int i = 0; i<s.length(); i++){
String replace = s.replace(s.charAt(i)+"","");
if(s.length()-replace.length() ==1){
set.add(s.charAt(i));
}
}
String answer = "";
Iterator<Character> itr = set.iterator();
while(itr.hasNext()){
answer += itr.next();
}
return answer;
}
TreeSet은 정렬을 위해 사용했는데... 맘에 안든다 또 고쳐봐야지
'Java' 카테고리의 다른 글
문자열과 String 클래스 (0) | 2024.01.05 |
---|---|
Optional<T> (0) | 2024.01.05 |
Stream<String>에서 String으로 변환하기 (0) | 2023.10.04 |
커스텀 어노테이션 (0) | 2023.09.20 |
Garbage Collector (0) | 2023.09.18 |