Daily coding

Java Basic : day 1 - 배열 + Alias / swapping 본문

Language/Java_basic

Java Basic : day 1 - 배열 + Alias / swapping

sunnnkim 2019. 11. 19. 00:18

Array : 배열

= 같은 자료형의 묶음

사용목적 : 같은 목적의 다수의 변수를 관리하기 위함

                                

자료형 배열명 [] = new 자료형[배열의 갯수];

자료형 []배열명   = new 자료형[배열의 갯수];

    stack영역                        heap영역

     (4 byte)                    (실제 데이터 있음)

* 배열을 할당할 때는 동적으로 할당(갯수의 제한은 없음)

* 할당 후에는 정적으로 사용 (사이즈 변경 불가)

동적(allocation) / 정적 (static)

 

//선언 방법

배열명 [index number] = 값;

int[] arrNum = new int[3];

               // 0 ~ (n-1)까지 인덱스 존재 

 

arrNum[0] = 1;

arrNum[1] = 2;

arrNum[2] = 3;

System.out.println(arrNum[0]); // 1

 

//배열은 미리 선언하고 사용할 수 있음

//배열의 크기를 벗어나면 예외 발생 (ArrayIndexOutOfBoundExpection)

int [] arrNum1 = {11, 20, 23, 30};

System.out.println(arrNum1[2]);

System.out.println(Arrays.toString(arrNum1));

 

//배열의 복제

//새로운 배열 데이터타입을 선언하고 그곳에 어떠한 배열 변수를 집어넣으면

//값들이 복사되어 새로운 배열이 만들어지는 것이 아니고

//같은 주소값을 향하고 있는 2개의 배열 변수가 생성된다 

//하나의 배열을 가리키고 있기 때문에 하나의 값이 변경되면 나머지 배열도 함께 변경됨

 

int numArr[] = { 111,222,333 } ; 

int numAlias[] = numArr;

 

numAlias[1] = 666;

System.out.println(numArr[1]);    // 666

//numAlias배열 값을 바꿨지만 numArr도 함께 바뀜

//numAlias에 numArr배열을 복사하는 것이 아니고 

//같은 주소값을 가리키기 때문에 같은 배열이 됨(복제)

 

//swap

char aaa[] = {'a', 'b', 'c'};

char bbb[] = { 'A', 'B', 'C'};

 

// char temp;

// temp 변수를 만들어 데이터가 지워지지 않고 바뀔 수 있도록 한다.

// for (int i = 0; i < aaa.length; i++) {

// temp = aaa[i];

// aaa[i] = bbb[i];

// bbb[i] = temp;

// }

//위의 방법도 가능하지만 많은 양의 데이터가 있을 경우 오래걸림

 

//배열의 복제를 통해 빠르게 값 바꾸기

//Alias

for (int i = 0; i < aaa.length; i++)

    System.out.println("aaa[" + i+  "] = " + aaa[i]);

 

char aaaAlias[] = aaa;

char bbbAlias[] = bbb;

char tempArr[];

 

tempArr = aaaAlias;

aaaAlias = bbbAlias;

bbbAlias = tempArr;

 

System.out.println("** Swapping aaa & bbb Array");

for (int i = 0; i < tempArr.length; i++) 

      System.out.println("aaa[" + i+  "] = " + aaaAlias[i]);

 

// 데이터를 하나하나씩 바꾸는 것이 아니고 배열을 통째로 temp[]에 넣고

// 한번에 모두 바꿔줌

 

// .length : 배열의 크기를 알아내는 연산자

System.out.println("aaa length is : " + aaa.length);