본문 바로가기
Java/Java

[Java] Array 클래스

by 기록하는_사람 2022. 10. 17.

Array 클래스 - 배열 복사

📌 public static int[] copyOf(int[] original, int newLength)

: newLength의 길이만큼 복사. 

  새로운 배열 생성해서 복사 후 반환하는 메소드.

 

📌 public static int[] copyOfRange(int[] original, int from, int to)

: original에 전달된 배열을 인덱스 from부터 to 이전까지 복사.

 

📌 public static int[] arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

: 배열 src의 srcPos에서 배열 dest의 destPos로 length 길이만큼 복사. 

 

Array 클래스 - 배열 비교

📌 public static boolean equals(int[] a, int[] b)

: a와 b 내용 비교 후 true 또는 false 반환.

  저장된 값의 수, 순서, 내용이 모두 같아야 함.

 

📌 public static bolean equals(Object[] a, Object[] b)

: 참조하는 인스턴스의 내용 비교 후 값 반환. 

 

Array 클래스 - 배열 정렬

📌 public static void sort(int[] a)

: 오름차순으로  정렬.

 

📌 public static void sort(Object[] a)

: 인스턴스의 참조 값을 저장하고 있는 배열에 대한 정렬. 

  Comparable 인터페이스 기반으로 정렬.

 

📌 interface Comparable

: int compareTo(Object o) 메소드 구현을 통해 인스턴스의 순서 판단 기준 결정.

 

💡 compareTo 구현 방법

① 인자로 전달된 o가 작으면, 양의 정수 반환.

② 인자로 전달된 o가 크면, 음의 정수 반환.

③ 인자로 전달된 o가 같으면, 0 반환. 

 

Array 클래스 - 배열 탐색

📌 public static void binarySearch(int[] a, int key)

: 배열에서 key를 찾으면 key의 인덱스 값, 없으면 0보다 작은 수 반환.

 

📌 binarySearch 메소드는 이진 탐색 알고리즘을 기반으로 탐색함.

     이진 탐색 알고리즘은 정렬된 데이터를 대상으로 하는 탐색 알고리즘임.

     따라서, 정렬된 상태에서 binarySearch 메소드를 호출해야 함. 

 

📌 public static void binarySearch(Object[] a, Object key)

: Comparable 인터페이스의 compareTo 메소드 기준.

  compareTo 메소드가 0을 반환하면, key에 해당하는 인스턴스를 찾았다고 판단. 

package array;

import java.util.Arrays;

class Student implements Comparable{
	int id;
	String name;
	
	public Student(int id, String name) {
		this.id = id;
		this.name = name;
	}
	
	@Override
	public int compareTo(Object o) {
		Student s = (Student)o;
		
		if(this.id > s.id) {
			return 1;  // 인자로 전달된 o가 작으면, 양의 정수 반환.
		}
		else if(this.id < s.id) {
			return -1;  // 인자로 전달된 o가 크면, 음의 정수 반환.
		}
		else {
			return 0;  // 인자로 전달된 o가 같으면, 0 반환. 
		}
	}
	
	@Override
	public String toString() {
		return id + " " + name;
	}
}

public class ArrayTest {

	public static void main(String[] args) {
		int[] ar1 = {1, 30, 94, 28, 3, 842, 9};
		Arrays.sort(ar1);
		
		for(int i : ar1) {
			System.out.print(i + " ");
		}
		System.out.println();  // 1 3 9 28 30 94 842 
		
		int ar1Index = Arrays.binarySearch(ar1, 9); // 9 찾기. 
		System.out.println("Index of 9 : " + ar1Index);  // Index of 9 : 2
		
		Student[] s= new Student[3];
		s[0] = new Student(1204, "jin");
		s[1] = new Student(1013, "jimin");
		s[2] = new Student(1004, "hani");
		Arrays.sort(s);
		
		for(Student i : s) {
			System.out.print(i + " ");
		}
		System.out.println();  // 1004 hani 1013 jimin 1204 jin 
		
		int sIndex = Arrays.binarySearch(s, new Student(1004, "who is 1004"));  // 1004 찾기. 
		System.out.println("Who is 1004? : " + s[sIndex]);  // Who is 1004? : 1004 hani
	}

}

 

 

 

'Java > Java' 카테고리의 다른 글

[Java] 와일드카드(Wildcard)  (0) 2022.10.18
[Java] 제네릭(Generics)  (0) 2022.10.18
[Java] StringTokenizer 클래스  (0) 2022.10.17
[Java] Math 클래스와 난수 생성  (0) 2022.10.17
[Java] BigInteger 클래스와 BigDecimal 클래스  (0) 2022.10.17

댓글