[Java] 배열의 정렬 및 탐색

YoungMinKim·2020년 11월 8일
0
post-thumbnail

배열의 정렬

Array 클래스의 sort 메소드

  • Arrays 클래스의 sort 메소드의 기준은 오름차순이다.
  • sort를 통해 Instance를 정렬할 시 생각할 부분이 많다.
    • Instance를 정렬하기 위한 기준이 필요하다.
  • 프로그래머는 위 같은 기준을 정해야 한다.

compareTo 메소드 정의 기준

  • compareTo 메소드를 통해 기준을 확립한다.
    • 인자로 전달된 o가 작다면 양의 정수 반환
    • 인자로 전달된 o가 크다면 음의 정수 반환
    • 인자로 전달된 o와 같다면 0을 반환
  • Comparable Interface를 통해 구현이 가능하다.

클래스에 정의하는 오름차순 기준

  • 나이, 이름을 기준으로 정렬의 기준을 잡을 수 있다.
  • 즉, 위에서 말했다시피 프로그래머가 기준을 잡아야 한다.
    • JVM은 두 인스턴스의 값을 비교한 후에 값을 반환한다.

예제 1-1

public int compareTo(Objecet o){
	Person p = (Person)o;
	return this.age - p.age;
}

배열의 탐색: 기본 자료형 값 대상


  • 탐색을 하는 가장 기본적인 이유는 값이 있는지 없는지 판단 하기 위함.
  • 또한, 어느 위치에 있는지 판단 하기 위함.
  • BinarySearch()를 통해 나온 결과는 인덱스의 위치를 반환.
  • 기본적으로 탐색의 대상은 배열인 경우가 많다.
  • BinarySearch()이진 탐색을 수행 한다.
    • 이진 탐색을 진행하기 위해서는 데이터들이 오름차순으로 정렬되어 있어야 한다.
    • 만약 오름차순이 수행되있지 않은 경우에는 sort를 통해 정렬 후 수행해야 한다.

예제 1-1

Class ArraySearch {
	public static void main(String[] args){
		int [] ar = {33, 55, 11, 44, 22};
		Arrays.sort(ar); // 탐색 이전에 정렬이 선행 되어야 한다.

		for(int n : ar)
			System.out.println(n + "\t");
			System.out.println(ß);
		
		int idx = Arrays.binarySearch(ar, 33); // 배열 ar에서 33을 찾아라.
		System.out.println("INdex : 33 " + idx);
	}
}

배열의 탐색: 인스턴스 대상의 예

  • Instance의 탐색을 진행할 시, compareTo()를 기준으로 결과를 반환 한다.
  • 즉, compareTo()의 현재 기준 나이를 통해 탐색을 한다.

제네릭

  • 명시적 형 변환은 코드의 안정성을 낮춘다.
  • 또한, 명시적 형 변환은 JVM의 간섭을 낮추기 때문에 오류의 발견이 힘들 수 있다.
  • 제네릭은 이러한 명시적 형 변환의 사용을 제어 할 수 있다.
    • 제네릭을 사용하는 이유가 단순히 자료형을 나중에 결정하기 위함이 아니다.
    • 성능과 예외 상황을 대비해 만들어진 문법이다.

제네릭 기반의 클래스 정의

  • < T >, < E >
    • Instance 생성 시 필요에 따라 < T >를 초기화 함을 의미.
    • 자료형을 미리 결정하는 것이 아닌 필요에 의해 결정.

제네릭 클래스 기반 인스턴스 생성

Box<Apple> abox = new Box<Apple>();
	- TApple로 결정하여 인스턴스 생성
	- 따라서 Apple 또는 Apple을 상속하는 하위 클래스의 인스턴스 저장 가능.

Box<Orange> abox = new Box<Orange>();
	- TOrange로 결정하여 인스턴스 생성
	- 따라서 Orange 또는 Orange을 상속하는 하위 클래스의 인스턴스 저장 가능.
profile
https://ym1085.github.io

0개의 댓글