import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String nString = br.readLine();
String[] inputStringArr = br.readLine().split(" ");
ArrayList<Integer> numberList = new ArrayList<>();
for(String inputString :inputStringArr){
numberList.add(Integer.parseInt(inputString));
}
Collections.sort(numberList);
System.out.println(numberList.get(0)+" "+numberList.get(Integer.parseInt(nString)-1));
}
}
Collections.sort(List<T> list)
Collections.sort(List<T> list, Comparator<? super T> c)
Comparator 인터페이스를 구현한 인스턴스에서 지정한대로 정렬한다.public abstract 메서드를 구현해야 하는 함수형 인터페이스 compare()를 구현하도록 강제하고 있다.@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
익명 객체 사용
Comparator 구현체는 보통 한 번만 사용되는 경우가 매우 많은데, 이렇게 1회만 사용되는 인스턴스의 경우 익명 클래스를 통해 처리하는 것이 좋다.Collections.sort(myBookList, new Comparator<Book>() {
@Override
public int compare(Book o1, Book o2) {
return o2.getPrice()-o1.getPrice(); // o2가 앞에 있으면 내림차순.
}
});
람다식을 사용한 간결화
members.sort((m1, m2) ->
m1.getName().equals(m2.getName()) ?
m1.getAge() - m2.getAge() :
m1.getName().compareTo(m2.getName()));
Arrays.sort()는 최악의 경우 시간복잡도는O(n2)이기 때문에,O(nlog(n))의 시간복잡도를 갖는Collections.sort()가 더 빠르다.
출처
Arrays.sort()와 Collections.sort()
[JAVA] 리스트(List) 정렬: Collections.sort() 코드를 뜯어보았다, Comparable
[JAVA] Array.sort 와 Collections.sort 의 차이
자바의 Comparator 과 Comparable 인터페이스
[Java] Comparator 구현부터 디폴트 메서드까지 활용해 정렬하기
Comparator와 Comparable의 차이 + 람다표현식