CF_07_Arrays 클래스

charl hi·2021년 9월 17일
0

JAVA_CF

목록 보기
7/12

Arrays

  • java.util.Arrays

  • 배열을 다루기 편리한 static 메소드 제공

  • ✨✨Arrays.메소드()


메소드

출력

  1. static String toString(타입[] a)
  • 일차원 배열을 출력한다.
[1, 2, 3, 4, 5]
  1. deepToString()
  • 다차원 배열을 출력한다.
[[11, 22], [21, 22]]


복사

  1. static <T>T[] copyOf(T[] original, int newLength)
  • 새로운 배열을 생성하여 앞에서부터 길이 newLength만큼 복사해 반환한다.
  1. static <T>T[] copyOfRange(T[] original, int fromIndex, int toIndex)
  • 새로운 배열을 생성하여 시작인덱스 fromIndex ~ 끝인덱스 toIndex - 1 만큼 복사해 반환한다.
int[] arr = {0, 1, 2, 3, 4};
int[] arr2 = Arrays.copyOf(arr, arr.length);	//[0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 7);		//[0, 1, 2, 3, 4, 0, 0]

int[] arr4 = Arrays.copyOfRange(arr, 2, 4);		//[2, 3]
int[] arr5 = Arrays.copyOfRange(arr, 0, 7);		//[0, 1, 2, 3, 4, 0, 0]


채우기

  1. static void fill(Object[] a, Object val)
  • 배열 a의 모든 요소를 특정 값 val로 초기화한다.

  • 두 매개변수 모두 같은타입!

  1. static void setAll(Object[] a, 람다식?)
  • 배열 a를 ~로
int[] arr = new int[5];
Arrays.fill(arr, 9);	//arr = [9, 9, 9, 9, 9]
Arrays.setAll(arr, (i) -> (int)(Marh.random()*5)+1);	//1<= x <6
//arr = [1, 5, 2, 1, 1]


정렬과 검색

  1. static void sort (Object[] a)
  • 배열 a의 모든 요소를 오름차순으로 정렬
  1. static int binarySearch(Object[] a, Object key)
  • 배열 a에서 key를 찾아 인덱스를 반환

  • ✨✨이진탐색 알고리즘 -> 정렬된 배열에만 가능하므로, 정렬 먼저!!!

  • ✨✨중복이 있을 시 중복제거 후 !! ... 나중에 다시!

int[] arr = {3, 2, 0, 1, 4};

int idx = Arrays.binarySearch(arr, 2);	//idx = -5 잘못됨!!

Arrays.sort(arr);	//[0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2);	//idx = 2 올바른 결과!


비교

  1. equals(Object[] a1, Object[] a2)
  • 일차원 배열을 비교한다. 일치하면 true
  1. deepEquals(Object[] a1, Object[] a2)
  • 다차원 배열을 비교한다. 일치하면 true


배열을 List로 변환

  1. static <T> List<T> asList(T... a)
  • 배열 a를 고정 크기 + 읽기전용의 List로 변환하여 반환한다.
    -> 따라서 크기를 변경, 추가, 삭제하려면 ✨new ArrayList새 ArrayList 객체를 생성해야 한다.

  • 여기서 ...는 가변 매개변수 : 매개변수의 개수가 가변적, 개수 상관없음

List list = Arrays.asList(new Integer[]{1,2,3,4,5});
List list = Arrays.asList(1,2,3,4,5);
//list = [1, 2, 3, 4, 5]
(X) list.add(6);	//UnsupportedOperationException 예외발생

List list = new ArrayList(Arrays.asList(1,2,3,4,5));
//변경하려면 이런식으로!!!*****


람다와 스트림(14장) 관련

  1. parallelXXX()

  2. spliterator()

  3. stream()

...다음에~~~



ex11_06

import java.util.Arrays;

public class Ex11_06 {

	public static void main(String[] args) {
		int[] 	arr = {0, 1, 2, 3, 4};
		int[][] arr2D = {{11,22,33}, {21,22,23}};
		
		//출력
		System.out.println("arr = "+Arrays.toString(arr));
		System.out.println("arr2D = "+Arrays.deepToString(arr2D));
		
		//복사
		int[] arr2 = Arrays.copyOf(arr, arr.length);
		int[] arr3 = Arrays.copyOf(arr, 3);
		int[] arr4 = Arrays.copyOf(arr, 7);
		int[] arr5 = Arrays.copyOfRange(arr, 2, 4);	//index2~3
		int[] arr6 = Arrays.copyOfRange(arr, 0, 7);	//index0~6
		
		System.out.println("arr2 = "+Arrays.toString(arr2));
		System.out.println("arr3 = "+Arrays.toString(arr3));
		System.out.println("arr4 = "+Arrays.toString(arr4));
		System.out.println("arr5 = "+Arrays.toString(arr5));
		System.out.println("arr6 = "+Arrays.toString(arr6));
		
		//채우기
		int[] arr7 = new int[5];
		Arrays.fill(arr7, 9);
		System.out.println("arr7 = "+Arrays.toString(arr7));
		
		//*****람다식?????????
		Arrays.setAll(arr7, i -> (int)(Math.random()*6 + 1));//1<= x <7
		System.out.println("arr7 = "+Arrays.toString(arr7));
		
		//***향상된 for문. 우항(배열)의 모든 요소를 좌항에 집어넣고 본문 시행
		for(int i : arr7) {
//		for (int x = 0; x < arr7.length; x++) {
//			int i = arr7[x];
			char[] graph = new char[i];	//랜덤값만큼의 길이를 갖는 문자 배열 생성
			Arrays.fill(graph, '*');	//그 길이만큼 *로 채운다.
			System.out.println(new String(graph)+i);
			//***String과 char[]의 변환방법 -> JAVA_48
		}
		
		//비교
		String[][] str2D = {{"aaa", "bbb"}, {"AAA", "BBB"}};
		String[][] str2D2 = {{"aaa", "bbb"}, {"AAA", "BBB"}};
		
		System.out.println(Arrays.equals(str2D, str2D2));		//1차원
		System.out.println(Arrays.deepEquals(str2D, str2D2));	//다차원
		
		//정렬과 이진검색
		char[] chArr = {'c','d','a','e','b'};
		
		System.out.println("chArr = "+Arrays.toString(chArr));
		System.out.println("index of 'b' = "+Arrays.binarySearch(chArr, 'b'));
		System.out.println("== After Sorting ==");
		Arrays.sort(chArr);//**binarySearch하기 전엔 반드시 정렬먼저!!!
		System.out.println("chArr = "+Arrays.toString(chArr));
		System.out.println("index of 'b' = "+Arrays.binarySearch(chArr, 'b'));
		
		

	}

}

arr = [0, 1, 2, 3, 4]
arr2D = [[11, 22, 33], [21, 22, 23]]
arr2 = [0, 1, 2, 3, 4]
arr3 = [0, 1, 2]
arr4 = [0, 1, 2, 3, 4, 0, 0]
arr5 = [2, 3]
arr6 = [0, 1, 2, 3, 4, 0, 0]
arr7 = [9, 9, 9, 9, 9]
arr7 = [2, 6, 5, 6, 3]
**2
******6
*****5
******6
***3
false
true
chArr = [c, d, a, e, b]
index of 'b' = -4
== After Sorting ==
chArr = [a, b, c, d, e]
index of 'b' = 1



Ref

0개의 댓글