peacekim
할 수 있는 것과 할 수 없는 것.
peacekim
전체 방문자
오늘
어제
  • 분류 전체보기 (68)
    • 👨‍🏫ps (44)
      • ❄️프로그래머스 (20)
      • 🔟0️⃣백준 (21)
      • leetcode (3)
    • ✍🏻study (20)
      • 👐java (6)
      • 🍃spring (1)
      • 🥇algorithm (0)
      • 🚘oodp (4)
      • 📒 jpa (3)
      • 👣DB (2)
      • 🌂네트워크 (0)
      • 🎸기타 (3)
      • 👊 kotlin (1)
      • 🫥 jvm (0)
    • 📽project (4)
      • 🎀ReBoN (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
peacekim

할 수 있는 것과 할 수 없는 것.

✍🏻study/👐java

Java Collection Framework 공부하기 Part 4.

2022. 3. 2. 01:03
반응형

🙌 Arrays, Comparator, Comparable를 알아보기

 

🧐 Arrays란 ❓

말그대로 배열에 대한 클래스다. 그렇기 때문에, 배열을 다루는데 유용한 메서드가 정의되어 있다. 

 

🧐 Arrays는 어떤 method를 가지고 있을까❓

 

  • 배열의 복사
    • copyOf(): 배열의 전체, copyOfRange(): 배열의 일부를 복사해서 새로윤 배열을 만들어 반환.
  • 배열 채우기
    • fill(): 배열의 모든 요소를 지정된 값으로 채운다.
    • setAll(): 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다. 함수형 인터페이스를 구현한 객체를 매개변수로 지정하거나 람다식을 지정해야한다.
여기서, 함수형 인터페이스란 1개의 추상 메소드를 갖는 인터페이스를 의미한다.
  • 배열의 정렬과 검색
    •  sort(): 말 그대로 배열을 정렬할 때 사용한다.
    • binarySearch(): 배열에서 지정된 값이 저장된 위치를 찾아서 반환한다. 하지만, 배열이 정렬된 상태일 때 사용해야 올바른 결과를 얻을 수 있다.
이진 탐색은 앞에서 부터 하나씩 탐색하는 것이 아닌, 검색할 범위를 반복적으로 절반씩 줄여가면서 검색하기에 검색 속도가 빠르다. 검색할 범위를 반복적으로 줄일 수 있는 것은 해당 배열이 정렬되어 있다는 것을 전제하에 줄일 수 있기 때문에, 정렬되어 있는 배열에서만 사용해야 올바른 결과를 얻을 수 있다.

 

🧐 Compartor와 Comparable이란 ❓

Compartor, Comparable 모두 인터페이스이다. 두 인터페이스는 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. Comparable를 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 비교할수 있다.

 

🤜 실제 소스

public interface Compartor{
	int compare(Object o1, Object o2);
    boolean equals(Object obj);
}

public interface Comparable{
	public int compareTo(Object o);
}

원하는 타입의 객체를 정렬하고 싶다면, 둘 중 하나의 인터페이스를 구현하고, compare, compareTo method를 오버라이딩하면 된다.

두 객체가 같으면 0, 비교하는 값보다 작으면 음수, 크면 양수를 반환하도록 구현해야한다.

 

🧐 팁

알고리즘 문제를 풀 때는 익명 클래스를 사용하여 구현해서 사용할 수 있다.

public class Main{
  public static class Node{
      private int num;
      private int weight;

      public Node(int num, int weight){
          this.num = num;
          this.weight = weight;
      }

      int getNum(){
          return num;
      }

      int getWeight(){
          return weight;
      }
  }

  public static void main(String[] args) throws Exception{
  	List<Node> graph = Arrays.asList(new Node(1,20),new Node(2,20),new Node(3,40));
    
    graph.sort(new Comparator<Node>(){
    	@Override
        public int compare(Node o1, Node o2){
        	if(o1.getWeight() < o2.getWeight()) return 1;
            else if(o1.getWeight() == o2.getWeight()) {
            	if(o1.getNum() < o2.getNum()) return -1;
            }
            else return -1;
        }
    });
  }
}

위 처럼 사용하면, Node의 weight가 큰 순서대로 정렬을 할 수 있고, 만약 weight가 같다면, num이 작은 순서대로 정렬이 된다.

 

Reference

  • Java의 정석 2편 - 남궁성
반응형

'✍🏻study > 👐java' 카테고리의 다른 글

Java Collection Framework 공부하기 Part 6.  (0) 2022.03.02
Java Collection Framework 공부하기 Part 5.  (0) 2022.03.02
Java Collection Framework 공부하기 Part 2.  (0) 2022.03.02
Java Collection Framework 공부하기 Part 3  (0) 2022.03.02
Java Collection Framework 공부하기 Part 1  (0) 2022.03.02
    '✍🏻study/👐java' 카테고리의 다른 글
    • Java Collection Framework 공부하기 Part 5.
    • Java Collection Framework 공부하기 Part 2.
    • Java Collection Framework 공부하기 Part 3
    • Java Collection Framework 공부하기 Part 1
    peacekim
    peacekim
    할 수 있는 것과 할 수 없는 것. github: https://github.com/PyeongGangKim

    티스토리툴바