IT★_공부

자바의 배열 Array

문또끼 2022. 8. 22. 21:15

Array

 

 

배열이란?

같은 type의 여러개의 값을 효과적으로 관리하기 위한 객체이다.

배열의 선언

type[] 변수 = 배열객체;

배열 정의방법

(1)

int[] a;           // 선언
a = new int[5];    // 정의
a[0] = 1;          // 초기화

(2)

int[] b = new int[] { 5, 4, 3, 2, 1 }; // 선언 정의 초기화

(3)

int[] c = { 7, 8, 9, 1, 2 };   // 선언 초기화 (정의 skip 가능.)

 

 

 

다차원배열

다차원 배열이란?

큰 배열 안에 작은 배열 넣기.

다차원 배열 선언

type[ ][ ] 변수 : 배열객체;

(배열속 배열의 크기가 일치하지 않아도 됨)

1차원: type[ ] 변수 : 배열객체;
2차원: type[ ][ ]변수 : 배열객체;
n차원 : type[ ][ ][ ]... 변수 : 배열객체;

배열 갯수 정의 : 변수 : new type[갯수];

배열 길이 확인 : 변수.length

배열 글자 비교 : 변수[ ].equals("비교문장"){ 코드 } : 비교문장 과 같으면 true 리턴

배열출력 : Arrays.ToString(변수) 다차원 배열출력 : Arrays.deepToString(변수)

< 객체를 복사하는 방식에 따라 얕은 복사(Shallow copy)와 깊은 복사(Deep copy)로 나뉜다. >

Shallow copy (=Reference copy)

배열의 주소값을 복사하기 때문에 같은 객체의 주소값 대입된다. (복사본을 수정하면 원본도 수정)

복사방법

int [] original = {10, 20, 30, 40};

int [] copy = original;

 

 

 

 

Deep copy

새로운 객체를 생성한다 (복사본을 수정해도 원본 변화 없음)

      int [] original = new int[] {10, 20,30,40}; // 오리지널 배열 생성

복사방법1 : 인덱스 값 하나하나를 복사하는 방법

int [] copyOne = new int [original.length]; // 오리지널 배열 길이와 동일한 배열 선언
	
 	for (int i =0; i < original.length; i++) { // 0번지 값부터 하나하나 복사
		copyOne [i] = original [i];  
		
	}

복사방법2 : 원본 객체에 복사 요청 (.clone() 사용 )

int[] copyTwo = original.clone(); // 함수를 이용하여 값 복사 요청

복사방법3 : System 을 사용하여 복사

int [] systemArray = new  int[10]; // 10칸을 가진 배열 생성
	Arrays.fill(systemArray, 4);     // systemArray ****배열의 값을 모두 4로 채운다

System.arraycopy(original, 0, systemArray, 5, 3);
// 오리지널의 0번지부터 3개를 systemArray 에 5번지부터 복사한다. 

 

 

< 용어정리 >

Arrays.toString(변수) : 배열변수를 string문자열로 바꿔준다. 변수.clone() : 변수와 똑같은 객체를 생성하고 리턴한다. Arrays.fill( 배열변수 , 값); : 배열의 각 원소를 동일한 값으로 변경할 때 사용한다. System.arraycopy(배열 변수A, 배열 변수A 시작위치, 배열 변수B, 배열 변수B 시작위치, 복사할 갯수) : 변수A의 시작위치부터 복사할 갯수만큼 변수B의 시작위치부터 저장한다 변수.hashCode() : 객체의 고유한 주소값을 리턴한다.

Arrays.asList(): ()안의 array값 받아와서 list화 시킴

  • for-each 문 = 배열 + for문

: 위처럼 배열과 for문을 혼합하여 손쉽게 사용할 수 있도록 한 for문 .

: for()의 오른쪽에 있는 배열 에서 값을 하나씩 가져와서 왼쪽의 변수안에 넣은 뒤 실행. 이를 반복하는 것.


 

 

 

배열을 정의하는 법 1.

 String[] AnimalGroup = {"cat", "dog","bird","rat"};
	System.out.println(AnimalGroup[1]);
	System.out.println(AnimalGroup.length);

배열을 정의하는 법 2.

	String[] AnimalGroup = new String[4];
	//new String 으로 new 새롭게/String문자열을 타입의 
	//4개의 길이를 갖고 있는 배열[4] 만들어준다. 
	
	AnimalGroup[0] = "cat";
	System.out.println(AnimalGroup.length);
	AnimalGroup[1] = "dog";
	System.out.println(AnimalGroup.length);
	AnimalGroup[2] = "bird";
	System.out.println(AnimalGroup.length);
	AnimalGroup[3] = "rat";
	System.out.println(AnimalGroup.length);
	
	
	}

ArrayIndexOutOfBoundsException:

배열 안의 값보다 배열의 크기를 작게 설정해 주었을 때 발생하는 오류

String[] AnimalGroup = new String[3];
	//new String 으로 new 새롭/String문자열을 타입의 
	// 4개의 길이를 갖고 있는 배열[4] 만들어준다. 
	
	AnimalGroup[0] = "cat";
	AnimalGroup[1] = "dog";
	AnimalGroup[2] = "bird";
	AnimalGroup[3] = "rat";

	System.out.println(AnimalGroup.length);
	

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
 Index 3 out of bounds for length 3
	at J08_array.com.DefineDemo.main(DefineDemo.java:27)

 

 

 

 

 

배열과 반복문의 혼합 1.

String[] AnimalGroup = { "cat", "dog", "bird", "rat" };

		for (int i = 0; i < AnimalGroup.length; i++) {
			System.out.println(AnimalGroup[i] + "이 다가옵니다.");
		}

cat이 다가옵니다.
dog이 다가옵니다.
bird이 다가옵니다.
rat이 다가옵니다.

배열과 반복문의 혼합 2.

String[] Color = {"red","black","orange","pink"};
		for(int i = 0; i< Color.length; i++){
			String MyColor = Color[i];
			System.out.println(MyColor + " is the new black");
		}

배열과 반복문의 혼합 3.

for-each 문 = 배열 + for문

: 위처럼 배열과 for문을 혼합하여 손쉽게 사용할 수 있도록 한 for문 .

: for()의 오른쪽에 있는 배열 에서 값을 하나씩 가져와서 왼쪽의 변수안에 넣은 뒤 실행. 이를 반복하는 것.