자바의 배열 Array
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()의 오른쪽에 있는 배열 에서 값을 하나씩 가져와서 왼쪽의 변수안에 넣은 뒤 실행. 이를 반복하는 것.