본문 바로가기
JAVA/java

[이론] 배열

by 빵으니 2020. 2. 26.

▶배열이란? 

- 연달아 방을 만든다! '아파트'에 비유할 수 있습니다!

같은 타입(동일한 평수의 아파트)의 여러 변수를 하나의 묶음으로 다루는 것

- 배열은 메모리가 하나의 열로 만들어 짐

 

▶배열의 선언과 생성

- 타입[ ] 변수명;    // 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));
	}

}

댓글