public String[] solution(String[] strings, int n) {
HashMap<String, Character> map = new HashMap<>();
for (String s : strings){
// map에 key, value를 넣을 때는 put()
map.put(s, s.charAt(n));
}
// Map의 Entry ArrayList를 생성하여 entrySet을 넣어줌
List<Map.Entry<String, Character>> entryList = new ArrayList<>(map.entrySet());
// Map.Entry의 comparingBy~ 메서드 사용하여 정렬
entryList.sort(Map.Entry.comparingByKey());
entryList.sort(Map.Entry.comparingByValue());
String[] answer = new String[entryList.size()];
for (int i=0; i<entryList.size(); i++){
answer[i] = entryList.get(i).getKey();
}
return answer;
}
// 1. Collection.sort()
// ArrayList 준비
ArrayList<String> list = new ArrayList<>(Arrays.asList("C", "A", "B", "a"));
System.out.println("원본 : " + list); // [C, A, B, a]
// 오름차순으로 정렬
Collections.sort(list);
System.out.println("오름차순 : " + list); // [A, B, C, a]
// 내림차순으로 정렬
Collections.sort(list, Collections.reverseOrder());
System.out.println("내림차순 : " + list); // [a, C, B, A]
// 대소문자 구분없이 오름차순
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
System.out.println("대소문자 구분없이 오름차순 : " + list); // [a, A, B, C]
// 대소문자 구분없이 내림차순
Collections.sort(list, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
System.out.println("대소문자 구분없이 내림차순 : " + list); // [C, B, a, A]
// 2. List.sort() 사용 방식은 위와 비슷하다.
// 3. 사용자 정의
class Fruit implements Comparable<Fruit> {
private String name;
private int price;
public Fruit(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public int compareTo(Fruit fruit) {
if (fruit.price < price) {
return 1;
} else if (fruit.price > price) {
return -1;
}
return 0;
}
출처: https://hianna.tistory.com/569 [어제 오늘 내일]
Collections.sort() 메소드는 객체를 정렬할 때, 해당 객체의 Comparable을 구현한 compareTo() 메소드를 참조하여, 정렬 순서를 결정
따라서, 정렬할 객체가 Comparable interface를 구현하고, compareTo() 메소드 안에 정렬 기준이 정의된다면, Collections.sort() 가 정의한 기준으로 정렬 기능을 수행한다. (사용자 정의 정렬)
위의 코드에서 Fruit class는 Comparable을 implements하고, compareTo 메서드를 override하여 정의했다.
따라서 Collection.sort()에 Fruit Collection을 넣는다면 Fruit class에서 override한 compareTo에 의해 정렬된다!
정적
이라는 뜻을 지닌다.static 영역
에 저장되기에 해당 클래스를 생성하지 않고도 다른 클래스에서 사용
할 수 있다.정보를 공유
한다는 기능도 지닌다.static 메소드는 static 영역이기에, static 변수가 아닌 변수(heap 영역)는 사용할 수 없다.
싱글톤 패턴
에서 사용된다.오늘까지 자바 알고리즘 풀이에 꽤 집중했다.
내일 마저 두문제를 풀고, 나머지 시간에는 알고리즘 개념에 조금 더 투자해야겠다.