[이론] 배열
▶배열이란?
- 연달아 방을 만든다! '아파트'에 비유할 수 있습니다!
- 같은 타입(동일한 평수의 아파트)의 여러 변수를 하나의 묶음으로 다루는 것
- 배열은 메모리가 하나의 열로 만들어 짐
▶배열의 선언과 생성
- 타입[ ] 변수명; // int[ ] score;
- 타입 변수명[ ]; // int score[ ];
▶배열의 생성
- 타입[ ] 변수명 →배열을 다루기 위한 참조변수 선언
- 변수이름 = new 타입[길이]; // score = new int[ ]; → 배열 실제 생성(실제 저장 공간)
*자바에서는 배열도 객체이기 때문에 new~를 생성해줘야 함.
▶배열의 길이
- int 범위의 양의 정수(0포함!)
- 배열이름.length → 배열의 개수
- 배열은 생성 후 길이를 변경 할 수 없음 → 처음에 메모리 전체를 일렬로 잡아줬기 때문
▶인덱스(index)
- 인덱스는 배열의 요소마다 붙여진 일렬번호이며 0부터 시작!
- 인덱스의 범위는 0부터 (배열길이-1)까지
- int[ ] score = new int[5] 라면 → 방 5개, 인덱스는 4까지
- score[0] → score이라는 아파트의 0번째 호
score[0] | score[1] | score[2] | score[3] | score[4] |
▶배열의 초기화
- int[ ] score = new int [ ] {50, 60, 70, 80, 90}; → 배열의 생성과 초기화
- int[ ] score = {50, 60, 70, 80, 90}; → 배열의 선언과 초기화의 기본 형태 / int[ ]는 생략 가능
▶배열의 출력 →Arrays.toString
int[] iArr = {100, 95, 80, 70, 60};
for(int i=0;i<iArr.length;i++) {//인덱스는 0부터 시작하므로 i<=iArr.length아님. 하나 작은 수
System.out.println(iArr[i]);
}
System.out.println(Arrays.toString(iArr)); //배열의 값을 문자열로 한번에 보여줘!
▶배열 기본 코드 (배열 객체 생성 후 값 초기화 및 출력)
package chap04;
public class ArrayTest1 {
public static void main(String[] args) {
//배열 선언
int ages[];
String names[];
//배열 객체 생성 꼭 해주기!
ages = new int[3];
names = new String[3];
//초기화
ages[0] = 1;
ages[1] = 2;
ages[2] = 3;
names[0] = "홍길동";
names[1] = "이순신";
names[2] = "세종대왕";
//값 출력
for(int i=0;i<3;i++) {
System.out.println("ages{" + i + "] = " + ages[i]);
System.out.println("names[" + i + "] = " + names[i]);
//배열 값 한번에 전부 출력
System.out.println(Arrays.toString(ages));
}
}
}
▶배열 객체의 각 요소 값 차례로 출력하기
package chap04;
public class ArrayTest2 {
public static void main(String[] args) {
//배열의 length 속성 사용 테스트
int num = 3;
int[] array1 = new int[5]; //길이가 5인 배열 array1 을 하나 만들겠다!
for(int i=0; i<array1.length;i++) {
array1[i] = num++;
}
for(int i=0;i<array1.length;i++) {
System.out.println("array1[" + i + "] = " + array1[i]);
}
}
}
▶배열 값 초기화
- 배열에서는 배열 값을 초기화 하는 동시에 값을 설정해 줄 수 있다.
package chap04;
public class ArrayTest3 {
public static void main(String[] args) {
// 배열을 초기화시키면서 생성하는 기능 테스트
String cities[] = {"서울","대구","춘천","울산","광주","천안"};
String nations[] = /*new String[]*/ {"대한민국","미국","영국","일본","프랑스"};
//new String[] 생략가능 -> 초기화와 동시에 배열 생성
//배열값 출력
for(int i=0;i<cities.length;i++) {
System.out.println("cities[" + i + "] = " + cities[i]);
}
for(int i=0;i<nations.length;i++) {
System.out.println("nations[" + i + "] = " + nations[i]);
}
}
}
▶특정 배열에서 특정값 Index 찾기
package chap04;
import java.util.Scanner;
public class ArrayTest4 {
public static void main(String[] args) {
//이름 찾기 테스트
String[] names = /*new String[]*/ {"홍길동","전우치","이도","세종대왕","이민지","이나라","이민수"};
Scanner sc = new Scanner(System.in);
int index = -1; //'없음'을 나타내기 위해 -1로 초기화
do {
System.out.println("검색할 이름을 입력하세요");
System.out.println("이름");
String name = sc.nextLine();
for(int i=0;i<names.length;i++) {
if(name.equals(names[i])) { //.equals로 문자열 일치여부 비교
index = i;
}
}
if(index != -1) {
System.out.println(name + "은 배열의 " + index + "인덱스 방에서 찾았습니다.");
break;
}
System.out.println("해당하는 이름이 존재하지 않습니다.");
}while(true);
}
}
▶개선된, 향상된 for 문 →for(변수타입 변수명1 : 변수명2)
package chap04;
public class ArrayTest5 {
public static void main(String[] args) {
String[] names = /*new String[]*/ {"홍길동","전우치","이도","세종대왕","이민지","이나라","이민수"};
for(int i=0;i<names.length;i++) {
System.out.println(names[i]);
}
//개선된 for문
//저장되어있는 데이터를 하나씩 자동으로 넣어서 출력해는 것
for(String name : names) { //콜론 오른쪽(반복할 수 있는 데이터 interator)에서 꺼내서 왼쪽에 담는 것
System.out.println(name);
}
}
}
▶배열의 복사 →System.arraycopy
- 배열은 한번 정해주면 변경이 불가능하므로 복사기능 필요
package chap04;
import java.util.Arrays;
public class ArrayTest6 {
public static void main(String[] args) {
// System.arraycopy 테스트
String[] cities = {"서울","대구","춘천","울산","광주","천안"};
String[] nations = {"대한민국","미국","영국","일본","프랑스"};
String[] newArray = new String [cities.length+nations.length];
System.arraycopy(cities, 0, newArray, 0, cities.length);
//어떤소스를,어디부터,어떤 소스로,어디부터,몇개나 넣을거야?
System.arraycopy(nations, 0, newArray, cities.length, nations.length);
//4인덱스까지는 cities가 들어있으니까
//System.out.println(newArray); 배열의 주소값 출력
System.out.println(Arrays.toString(newArray));
}
}