JAVA

JAVA 배열

짱코딩러 2022. 7. 9. 17:57

배열

선언(참조변수, 레퍼런스 변수)

  int[] score;

생성(공간 생성)
  score = new int[5];

선언+생성

  int[] score = new int[5]

선언+값저장

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

  double[] a = {0.01, 0.02, 0.03, 0.04}

배열의 길이

  score.length

비정방형 배열의 길이

 score[i].length

 

여기서 [5]는 배열의 인덱스라고 불림.(배열의 방 개수)

배열의 인덱스 범위는 = 5-1개 

 

2차배열 [ ][ ]

score = new int[행][열];

[5]= score.length

[3]= score[i].length

     
     
     
     
     

△요런 크기의 배열인거임!

 

2차원배열의 이중반복문

for(int i=0; i<배열명.length; i++){
	for(int j=0; j<배열명[i].length; j++)
    }
   }

 

섞기

public static void main(String[] args) {
		int[] ball = new int[45];
		int tmp = 0;
		for(int i=0; i<ball.length; i++) 
			ball[i] = i +1;
		for(int i=0; i<ball.length; i++) {
			System.out.print(ball[i]+ " ");
		}
		
		System.out.println();
		for(int i=0; i<6; i++) {	//각 for문은 별개이므로 변수이름 같아도 상관X.
			int j = (int)(Math.random()*45);
			tmp = ball[i];     //섞기
			ball[i]= ball[j];  //섞기
			ball[j]= tmp;	   //섞기
		}
		for(int i=0; i<ball.length; i++) {
			System.out.print(ball[i]+ " ");
		}
	}

 

 

가변배열(비정방형)

:마지막 차수의 크기를 지정하지 않고 각각 다르게 지정

public static void main(String[] args) {
		int intArray[][] = new int[4][];
		intArray[0] = new int[3];
		intArray[1] = new int[2];
		intArray[2] = new int[3];
		intArray[3] = new int[2];

		for (int i = 0; i < intArray.length; i++)
			for (int j = 0; j < intArray[i].length; j++)
				intArray[i][j] = (i + 1) * 10 + j;

		for (int i = 0; i < intArray.length; i++) {
			for (int j = 0; j < intArray[i].length; j++)
				System.out.print(intArray[i][j] + " ");
			System.out.println();
		}
	}

 

Arrays클래스

 equals()  ->1차원 비교

 deepEquals()  ->다차원 비교

 toString()  ->문자열로 바꿔줌

 copyOf()  ->복사

 Arrays.copyOfRange()  -> n~m까지 복사

 sort()  ->정렬(오름차순)

 Arrays.toString(배열명)  ->배열 출력

더보기

copyOf(), copyOfRange()
copyOf()는 배열의 전체를 복사하는 것이며 copyOfRange()는 배열의 일부를 복사하는 것이다.

int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length);    // arr2=[0,1,2,3,4]
int[] arr3 = Arrays.copyOf(arr, 3);             // arr3=[0,1,2]
int[] arr4 = Arrays.copyOf(arr, 7);             // arr4=[0,1,2,3,4,0,0]

int[] arr5 = Arrays.copyOfRange(arr, 2, 4);     // arr5=[2,3] <- 4는 포함되지 않는다.
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);     // arr4=[0,1,2,3,4,0,0]

fill(), setAll()

fill()은 배열의 모든 요소를 지정된 값으로 채운다. setAll()은 배열을 채우는데 사용할 함수형 인터페이스르 매개변수로 받는다. 이 메서드를 호출할 때는 함수형 인터페이스를 구현한 객체를 매개변수로 지정하던가 아니면 람다식을 지정해야한다.

int[] arr = new int[5]
Arrays.fill(arr, 9)                                 // arr=[9,9,9,9,9]
Arrays.setAll(arr, i -> (int) (Math.random()*5)+1); // arr=[1,5,2,1,1]

sort(), binarySearch()
sort()는 배열을 정렬할 때 그리고 배열에 저장된 용소를 검색할 때는 binarySearch()를 사용한다. binarySearch()는 배열에서 지정된 값이 저장된 위치(index)를 찾아서 반환하는데 반드시 배열이 정렬된 상태여야지 한다.

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 <- 올바른 결과

equals(), toString(), deppEquals(), deppToString()
간단하게 비교하자면 toString() 1차원, deepToString() 다차원 배열 equals()도 1차원 deppEquals()는 다차원 비교 이다. 아래 소스를 보면 이해가 갈 것이다.

int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = { {11,12}, {21,22} };

Arrays.toString(arr)        // [0,1,2,3,4]
Arrays.deepToString(arr2D)  // [[11,12],[21,22]]

asList(Object o)
asList()는 배열을 List에 담아서 변환한다. 한가지 주의할 점은 asList()가 변환한 List의 크기를 변경할 수 없다는 것이다.

List list = Arrays.asList(new Integer[]{1,2,3,4,5})
List list = Arrays.asList(1,2,3,4,5)
list.add(6);        // 에외 발생 List size 추가 및 삭제 불가

만일 추가 or 삭제를 하려면 List list = new ArrayList(Arrays.asList(1,2,3,4,5))의 형식으로 선언을 하면 list에 추가를 할 수 있다. 참고로 알아두자.