복제

package com.javaex.api.array;

import java.util.Arrays;

public class ArrayEx {
	public static void main(String[] args) {
		arrayCopyEx();
	}
	private static void arrayCopyEx() {
		int arr[]  = new int[] {1,2,3,4,5};
		
		//	System 이용 복사
		int[] target = new int[arr.length];
		System.arraycopy(arr,	// 원본배열 
				0,	//	시작인덱스
				target,	//	대상 배열
				0,	//	시작 인덱스
				arr.length	//	복사할 길이
				);
		System.out.println("원본 배열 : " + Arrays.toString(arr));
		System.out.println("System 복제 : "+ Arrays.toString(target));
		
		
		//	arrays의 복제 메서드
		target = Arrays.copyOf(arr, arr.length);	//	원본 배열, 복사할 배열 길이
		System.out.println("CopyOf : "+ Arrays.toString(target));
		
		
		// 	배열 일부 복제
		target = Arrays.copyOfRange(arr, 1, 3);	//	원본 배열, 복사 시작 인덱스, 복사할 끝 인덱스
		System.out.println("CopyOfRange : " + Arrays.toString(target));
	}
}
  • Arrays.arraycopy ( 원본 배열, 시작인덱스, 대상 배열, 대상 배열의 시작 인덱스, 복사할 길이)
  • Arrays.copyOf( 원본 배열, 복사할 배열 길이)
  • Arrays.copyOfRange( 원본 배열, 복사 시작 인덱스, 복사할 끝 인덱스)

 

정렬

1. 

//역순 정렬
	private static void basicSortDesEx() {
		Integer[] scores = {80,50,70,90,75,88,77};
		System.out.println("원본 : "+ Arrays.toString(scores));
		Arrays.sort(scores, Collections.reverseOrder());
		//	배열이 기본 타입이아닌, 랩컨버런스?로 해줘야함 int -> Integer
		System.out.println("역순 정렬 : "+ Arrays.toString(scores));
	}
	private static void basicSortEx() {
		int[] scores = {80,50,70,90,75,88,77};
		System.out.println("원본 : "+ Arrays.toString(scores));
		Arrays.sort(scores);
		System.out.println("Sort정렬 : "+ Arrays.toString(scores));
	}

 

2. 

private static void customClassSort() {
		Member[] members = {
				new Member("홍길동"),
				new Member("고길동"),
				new Member("장길산"),
				new Member("임꺽정")
		};
		System.out.println("원본 : "+ Arrays.toString(members));
		Arrays.sort(members);	//	런타임 에러 ->   cannot be cast to class java.lang.Comparable
		System.out.println("정렬 : "+ Arrays.toString(members));
		Arrays.sort(members, Collections.reverseOrder());;
		System.out.println("역순 정렬 : "+ Arrays.toString(members));
		
	}
package com.javaex.api.array;

public class Member implements Comparable {
	String name;
	
	public Member(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Member [name=" + name + "]";
	}
	
	//	ComparTo를 오버라이딩 해줘야한다. 
	@Override
	public int compareTo(Object o) {
		//	0 : 두 객체의 순번이 같다. 
		//	음수 : 순서가 앞이다. 
		//	양수 : 순서가 뒤다.
		if(o instanceof Member) {
			Member other = (Member)o;
			return name.compareTo(other.name);
		}
		return 0;
	}
	
	
	
}

 

다른 방법으론

private static void customClassSort() {
		Member[] members = {
				new Member("홍길동"),
				new Member("고길동"),
				new Member("장길산"),
				new Member("임꺽정")
		};
		System.out.println("원본 : "+ Arrays.toString(members));
		Arrays.sort(members);	//	런타임 에러 ->   cannot be cast to class java.lang.Comparable
		System.out.println("정렬 : "+ Arrays.toString(members));
		
//		Arrays.sort(members, Collections.reverseOrder());;
		Arrays.sort(members, new Comparator<Member>() {

			@Override
			public int compare(Member o1, Member o2) {
				return o1.name.compareTo(o2.name);
			}
			
			
		});
		System.out.println("역순 정렬 : "+ Arrays.toString(members));
		
	}

Comparetor<Member>를 사용한다. 

검색

이진 검색

  • 미리 정렬이 되어 있어야 한다. 
  • private static void bsicSearch() { int [] scores = {80,50,70,90,75,88,77}; // 이진 검색 방식은 미리 정렬이 되어 있어야 한다. Arrays.sort(scores); System.out.println("원본 : " + Arrays.toString(scores)); int index = Arrays.binarySearch(scores,75); // 75가 몇 번째 인덱스? System.out.println("75가 있는 인덱스 : "+ index); }​

 

 

 

'study > JAVA 전문가' 카테고리의 다른 글

자료구조 1  (0) 2021.12.09
Wrapper Class, 제너릭, ,,  (0) 2021.12.08
얕은 복제, 깊은 복제  (0) 2021.12.07
인터페이스  (0) 2021.12.07
예외  (0) 2021.12.07

+ Recent posts