티스토리 뷰
배열이란
- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
- 배열의 참조변수는 주소값을 저장하며, 실제 값을 저장하는 것은 아니다.
- 배열의 선언 및 생성은: 타입[] 변수이름 = new 타입[길이] 와 같이 한다.
배열의 생성과정
- int [] score
- in형 배열 참조변수 score를 선언한다. 아직 데이터를 저장할 수 있는 공간은 마련되지 않았다.
- score = new int[5]
- 연산자 new에 의해서 메모리의 빈 공간에 5개의 int형 데이터를 저장할 수 있는 공간이 마련된다.
- 각 배열요소는 자동적으로 int의 기본값인 0으로 초기화된다. (String은 참조형 변수이므로, null값이 기본으로 초기화된다)
- 대입 연산자 '='에 의해 배열의 주소가 int형 참조변수 score에 저장된다.
배열의 인덱스와 길이
- 인덱스: 배열의 요소마다 붙여진 일련번호: 0~'배열길이-1'까지
- 배열의 길이는 JVM이 별도로 관리한다.
- 배열이름.length로 길이를 구할 수 있다.
- 배열의 길이는 한 번 생성되면 변경할 수 없다. 따라서 배열이름.length는 상수다. - 배열의 길이를 변경하려면, 더 큰 배열을 생성하고 새로운 배열에 복사해야 한다.
배열의 초기화
- int[] score = new int[] {50, 60, 70}; or int[] score = {50, 60, 70};
배열의 출력
- 반복문으로 인덱스를 활용하여 출력할 수 있다.
- Arrays.toString(배열이름) 메서드를 사용하면, [첫 번째 요소], [두 번째 요소] 와 같이 반환한다. - import java.util.*
- 만약 배열 이름으로 바로 출력한다면, '타입@주소' 형식으로 출력된다. 이때 주소는 실제 주소가 아닌 내부 주소이다.
- 예외적으로, char배열은 출력 시 각 요소를 그대로 출력한다.
배열의 복사
- 배열 복사 시, 배열의 길이를 넉넉하게, 기존의 2배 정도 길이로 생성하는 것이 좋다.
- 배열 복사 방법1. for문의 활용. 기존 값을 새 배열에 넣은 뒤, 기존 참조변수가 새로운 배열을 가리키게 한다.
- 자신을 가리키는 참조변수가 없는 기존 배열은 더이상 사용할 수 없다. 이런 배열은 JVM의 가비지 컬렉터에 의해 자동적으로 메모리에서 제거된다.
- 배열 복사 방법2. System.arraycopy() 활용. arraycopy()는 지정된 범위의 값을 한 번에 통째로 복사한다. 각 요소들이 연속적으로 저장되어 있다는 배열의 특성 때문에 가능한 것.
- System.arraycopy(기존 배열명, 첫 번째 요소, 새 배열명, 복사될 첫 번째 위치, 복사할 길이)
- System.arraycopy(num, 0, newNum, 0, num.length);
예제
카드 섞기
- 중복된 값이 없는 배열을 먼저 생성하고, Math.random()으로 랜덤한 값(0~9 인덱스)을 생성하여 값을 바꿔준다.
- 중복된 값이 없는 배열에서 값들의 위치만 바꾸는 것이므로 중복된 값이 나올 수 없다.
public class ch5_ArrayEx7 {
public static void main(String[] args){
int[] numArr = new int[10];
for(int i=0; i<numArr.length;i++){
numArr[i] = i;
System.out.print(numArr[i]);
}
for(int i=0; i<numArr.length; i++){
int n = (int)(Math.random() *10);
int tmp = numArr[i];
numArr[i] = numArr[n];
numArr[n] = tmp;
}
for(int i:numArr){
System.out.print(i);
}
}
}
'개발' 카테고리의 다른 글
| [Java] 다차원 배열 (0) | 2022.05.15 |
|---|---|
| [Java] String 배열 / Char 배열 (0) | 2022.05.15 |
| [항해99] 첫 미니 프로젝트 시작 (0) | 2022.05.09 |
| [노마드코드: 파이썬 챌린지] 장고 입문 (0) | 2022.04.14 |
| [노마드코더: 파이썬 챌린지] 문법 강의 (0) | 2022.04.12 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 서버환경
- AfterEach
- jinja2
- 상속
- ORM
- bean
- 자바의정석
- 몽고db
- 단항연산자
- ResetController
- MVC
- 배열
- 스프링부트
- ManyToMany
- 항해99
- toCharArray
- OneToMany
- ManyToOne
- 제어자
- DI
- IOC
- Java
- overfatching
- 임포트
- 패키지
- 고민
- AssertJ
- clean-up policy
- GIT
- controller
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
글 보관함
