배열
배열이란?
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
예)
int score1, score2, score; //일일이 선언하기 복잡하다
int[] score = new int[5]; //5개의 int 값을 저장할 수 있는 배열을 생성한다.
배열을 다루기 위한 참조변수가 필요하다 //저장공간 : 인덱스
배열의 저장공간은 연속적이다.
배열의 선언과 생성
배열의 선언 : 배열을 다루기 위한 참조변수의 선언
선언방법 | 선언 예시 |
타입[] 변수이름; | int[] socre; String[] name; |
타입 변수이름[]; | int score[]; String name[]; |
대괄호는 타입 뒤에 붙여도 되고, 변수이름 뒤에 붙여도 된다.(취향)
배열의 생성 :
타입[] 변수이름; //배열을 선언(참조변수 선언)
변수이름 = new 타입[길이]; //배열을 생성(실제 저장공간 생성)
int[] score; //int타입의 배열을 다루기 위한 참조변수 score선언
score = new int[5] //int타입의 값 5개를 저장할 수 있는 배열생성
배열의 길이와 인덱스
생성된 배열의 각 저장공간을 '배열의 요소(elements)'라 하며, '배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다.
인덱스(index)는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
인덱스(index)의 범위는 0부터 '배열길이 -1'까지
= 인덱스의 범위는 1부터 5까지가 아닌 0부터 4까지이다.
배열에 값을 저장하고 읽어오는 방법은 변수과 같다.
변수이름 대신 '배열이름[인덱스]'를 사용한다
int value = score[3]; //배열 score의 4번째 요소의 값을 읽어서 value에 저장
*for문의 제어변수 i는 배열의 index로 사용하기에 딱 알맞아서, 배열으르 다룰 때 for문은 거의 필수적이다.
배열의 길이
타입[] 배열이름 = new 타입[길이];
int[] arr = new int[5]; //길이가 5인 int 배열
*배열의 길이는 int범위의 양의 정수 (0포함)이어야 한다.
그렇기에 길이가 0인 배열도 생성이 가능하다.
배열이름.length
자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서
배열의 길이에 대한 정보를 얻을 수 있다.
“배열은 한번 생성하면 (실행동안) 그 길이를 바꿀 수 없다.”
그렇기에 '배열이름.length'는 상수이다.
배열의 초기화
배열의 각 요소에 처음으로 값을 저장하는 것 //자동초기화 : int
for문으로 배열을 초기화하려면, 배열의 생성과 초기화를 동시에 하는편이 좋다.
int[] score = new int[] { 50, 60, 70, 80 };
배열의 출력
배열을 초기화 할 때 for문을 사용하듯이, 배열의 저장된 값을 확인할 때도 for문을 사용하면 된다.
int[] iArr = { 100. 95. 80 70 60}; // 배열을 가리키는 참조변수 iArr의 값을 출력한다
배열의 내용을 쉽게 확인하는 메서드
'Arrays,toString(배열이름)' //사용을 위해 import.java.util*을 추가해야한다
*이클립스 참고 : ctrl shift o >>자동으로 import문 추가
배열의 복사
for문을 이용한 배열복사
System.arraycopy()를 이용한 복사 //효율적이다
배열의 활용
1. 총합과 평균 : 배열의 모든 요소를 더해서 총합과 평균을 구한다
2. 최대값과 최소값 : 배열의 요소 중에서 제일 큰 값과 제일 작은 값을 찾는다.
3. 섞기(shuffle) : 배열의 요소의 순서를 반복해서 바꾼다.(카드섞기, 로또번호 생성)
4. 임의의 값으로 배열 채우기 : 연속 또는 불연속적인 값들로 배열을 초기화 한다.
5. 정렬하기(sort) : 오름차순, 내림차순으로 배열을 정렬한다.
6. 빈도수 구하기 : 배열에 어떤 값이 몇 개 저장되어 있는지 세어서 보여준다.
String배열의 선언과 생성
String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성한다.
char배열과 String 클래스
String 클래스는 char[]와 메서드(기능)를 결합한 것이다
String 클래스는 내용을 변경할 수 없다 (read only)
//변경가능한 문자열을 다루려면, StringBuffer 클래스를 사용해야 한다.
String 클래스의 주요 메서드
메서드 | 설명 |
char charAt(int index) | 문자열에서 해당 위치(index)에 있는 문자를 반환한다 |
int length() | 문자열의 길이를 반환한다 |
String substring(int from, int to) | 문자열에서 해당 범위(from~to)의 문자열을 반환한다. (to는 포함x) |
boolean equals (Object obj) | 문자열의 내용이 같은지 확인한다. 같으면 결과는 true 다르면 false |
char[] toCharArray() | 문자열을 문자배열(char[])로 변환해서 반환한다. |
char배열과 String클래스의 변환
다음의 코드를 사용
char[] chArr = { 'A', 'B', 'C' };
String str = new String(chArr); //char -> String
char[] tmp = str.toCharArray(); //String -> char
커맨드 라인을 통해 입력받기
커맨드 라인에 입력한 값이 문자열 배열에 담겨서 전달된다.
자바는 길이가 0인 배열을 허용한다.
다차원 배열 - 2차원 배열
테이블 형태의 데이터를 저장하기 위한 배열
2차원 배열의 원리를 파악하면 다차원의 이해도 가능하다
2차원 배열의 선언
괄호[]가 하나 더 들어간다.
선언 방법 | 선언 예시 |
타입[][] 변수이름; | int[][] score; |
타입 변수이름[][]; | int score[][]; |
타입[] 변수이름[]; | int[] score[]; |
2차원 배열의 인덱스
int[][] score = new int[4][3]; //4행 3열의 2차원 배열 score생성
**인덱스는 0부터 시작한다는걸 잊지말자
2차원 배열의 초기화
괄호 { }를 사용해서 생성과 초기화를 동시에 할 수 있다.
int[][] arr = new int[][] {1,2,3}, {4,5,6}
int[][] arr = {1,2,3}, {4,5,6}//new int 생략
가독성면에서는 아래와 같이 행별로 줄 바꿈을 해주는 것이 좋다.
int[][] arr= {
{1.2.3}
{4.5.6}
};
2차원 배열에서는
score[i].length와 향상된 for문의 사용이 중요하다.
가변배열
2차원 이상의 다차원 배열을 생성할 때 전체 배열 차수 중 마지막 차수를 배열하지 않고,
추후에 각기 다른 길이의 배열을 생성함으로써 유동적인 가변 배열을 구성할 수 있다.
가변배열 역시 중괄호{}를 이용하여 생성과 초기화를 동시에 하는것이 가능하다.
다차원 배열의 활용 - 참고사항
문자열의 비교와 출력 – equals(), toString()
1차원 배열 equals
2차원, 다차원 deepEquals
배열의 정렬 – sort() //오름차순으로 배열
배열의 복사
copyOf(), cofyOfRange()