날아라쩡글이의 블로그입니다.

java.util.유틸리티 클래스 본문

중앙 HTA (2106기) story/java API story

java.util.유틸리티 클래스

날아라쩡글이 2021. 10. 8. 05:09
반응형

Java.util.Arrays

  • static메소드만 있다. 
  • 배열과 관련된 기능을 제공하는 유틸리티 클래스 
  • 복사, 비교, 검색, 정렬 등의 기능을 제공한다. 

Java.util.Collections

  • 자료구조와 관련된 기능을 제공하는 유틸리티 클래스 
  • 복사, 비교, 검색, 정렬등의 기능을 제공한다. 

Java.util.Objects

  • 객체와 관련된 기능을 제공하는 유틸리티 클래스 

S로 끝나는 클래스는 유틸리티 클래스라고 불리운다. 

method

  • Arrays.asList(E....e) 
    • 지정된 객체들이 저장된 List 자료구조 객체를 반환한다. 
    • java.util.Array$ArraysList가 만들어져서 반환된다. 
  • Collections.sort(List<E>list) 
    • List객체에 저장된 요소들을 오름차순으로 정렬한다. 
  • Collections.reverse(List<E>list)
    • List객체에 저장된 요소들을 역순으로 다시 저장한다. 

정렬을 하기 위해서는 어떤 기준으로 정렬할지에 대한 기준이 있어야한다. 

  • Collections.sort(정렬할 배열의 참조변수)은 바로 사용할 수 없다. 
  • static메소드를 implements Comparable<T>으로 작성해주어야한다. 
    • T에는 비교할 대상이 되는 class의 타입을 적어주어야한다. 
    • Comparable의 뜻은 비교가능한이라는 뜻이다. 
  • <T extends Comparable<? super T>> void sort (List<T> List)에 해당하는 interface Comparable의 정보이다. Comparable의 하위객체들만 사용이 가능하기 때문에 아무런 연관도 없는 객체에 사용할 수 없어, 구현을 진행해 주어야 사용할 수 있다. 
  • 그리고 interface를 구현했기 때문에 모든 method를 구현해주어야한다. 
  • compareTo(T other) --> 비교할 객체를 입력해주면된다. 
    • other에는 나랑 비교대상이 되는 비교객체와 비교대상이 되는 다른 값을 입력해주면된다. 
  • 구현 : {(X, Y) such that X.compareTo(Y) <=0 }
    • 결과값에 따라서 오름차순, 내림차순이 다르다.
    • 0보다 큰값으로 나오는 경우 X의 값이 더 높다. 이 객체의 점수가 높다. 
    • 0이 나오는 경우 점수가 같다. 
    • 0보다 작은 값으로 나오는 경우 Y의 값이 더 높다. 이 객체의 점수가 낮다. 
    • 오름차순의 경우 양의 점수일 때 숫자를 바꾼다. 
    • 내림차순으로 원할 경우 결과를 -로 
    • 오름차순을 원할 경우 결과를 +로 진행해주면 된다. 
    • 그리고 Collections.sort(출력할 객체의 주소값을 포함하고 있는 참조변수)를 입력해주고, 출력하면 된다. 

배열이나 List에 저장된 객체를 정렬하기 

  1. 클래스가 Comparable<T>인터페이스를 구현한다. 
  2. 클래스가 Comparable<T>인터페이스를 구현할 수 없는경우.
    • public class Score{
    • List<Score> list = new ArrayList<>();
    • list.add(Score);
    • list.add(Score);
    • list.add(Score);
    • list.add(Score);
    • Collections.sort(list);//오류발생! 컴파일 실패 
    • Collections.sort(list, 비교기 객체 ); //비교할 객체가 필요하다, 어떻게 만들면 될까?
    • 비교기 객체 구현을 위한 인터페이스 만들기!
      • 1. 익명클래스를 만든다. 한번만 사용하고 말 객체를 의미한다. 
      • Compare<Score> totalComparator = new Comparator<>(){
      • public int compare(Score score1, Score score2) {
      • return score1.getTotal() -  score2.getTotal();}
      • };
      • 2. 익명클래스를 람다식표현방식으로 사용한다.
      • 빨간부분만 입력하면, 자동으로 JVM에서 sort의 매개변수를 2개짜리 인것을 확인, comparator의 구현채인 것을 확인, 매개변수 2개고 반환타입이 int인 것을 확인한다. 
      • 지금여기서 앞에 Compare부분이 그림판으로 입력하면서 짤렸다. Comparator부분이 작성되어있었다. 
      • Collections.sort(scoreList, (Score s1, Score s2) -> s1.getEng() - s2.getEng());람다표현식으로 입력하였다.
      • 바로 Collections.sort에 대입하여 작성하였다. 
      • 3. Collections.sort(scoreList, new Comparator<Score>()){
      • @Override
      • public int compare(Score score1, Score score2) {
      • return score1.getKor() - score2.getKor();
      • } collections.sort의 매개변수에  바로 new Comparator의 객체를 생성하여 method를 override해준다. 
  3. 즉,  
    1.  메소드정의하기, implements로 구현한다.
    2.  익명객체로 만든다. 
    3.  매개변수로 comparator<>()을 호출하여 메소드를 override한다. 
    4.  람다식 표현법으로 만들기 

인터페이스의 추상메소드가 1개있는 것은 람다표현식에서 작성가능하다. 매개변수와 수행문만 작성하면된다. 

실제로 정렬의 경우는 데이터베이스에서 많이한다. DB에서 정렬하는 방법이 훨씬 쉽다. 

DB에서 정렬된 데이터를 ArrayList에 담기 때문에 java에서는 정렬할 일이 많지는 않다

-익명클래스 

-인터페이스 구현

-람다표현식의 맛보기였다. 

반응형

'중앙 HTA (2106기) story > java API story' 카테고리의 다른 글

Formating (포맷팅)  (0) 2021.10.08
Random class  (0) 2021.10.08
Map interface  (0) 2021.10.08
Set interface, List interface(iterator)  (0) 2021.10.07
Generic(제네릭)  (0) 2021.10.05
Comments