배열(Array)
- 여러개의 변수를 일일이 쓰지 않고 사용하는 자료형
배열요소
- 배열을 이루는 가각의 자료
배열선언방식
인덱스 연산자 [ ]
- 배열 요소가 저장된 위치를 찾아주는 역할
배열 초기화 하기
1. int[ ] studentIDs = new int[ ] {101, 102, 103}; // 개수는 생략
2. int[ ] studentIDs = new int[ 3 ] {101, 102, 103}; // 개수 생략하지 않아 오류
3. int[ ] studentIDs = {101, 102, 103}; // 요소가 3개인 배열 생성
4. int[ ] studentTDs;
int[ ] studentIDs = new int[ ] {101, 102, 103};
// 자료형을 우선 선언하고 초기화하는 경우 new int[ ] 생략할 수 없음
배열순서
- 0부터 n-1번까지 ( total : n개 )
length
- 배열의 길이를 나타냄 ( 전체 요소 개수 )
- 배열의 전체 길이만큼 반복수행시 length 속성을 사용
size
- 유효한 값의 개수를 나타낼 때 사용
- ex)
double[ ] data = new double[5];
int size = 0;
data[0] = 10.0; size++;
data[1] = 20.0; size++;
data[2] = 30.0; size++;
for(int i = 0; i < size; i++){
System.out.println(data[i]);
배열 복사하기
- 방법 1 : for문을 사용하여 복사
- 방법 2 : System.arraycopy( ) 메서드를 사용하여 복사
- System.arraycopy(src, srcPos, dest, destPos, length)
얕은 복사
- 인스턴스 자체가 아닌 인스턴스의 주소값을 복사
package array;
public class ObjectCopy2 {
public static void main(String[] args) {
Book[] bookArray1 = new Book[3];
Book[] bookArray2 = new Book[3];
bookArray1[0] = new Book("태백산맥", "조정래");
bookArray1[1] = new Book("데미안", "헤르만 헤세");
bookArray1[2] = new Book("어떻게 살 것인가", "유시민");
System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
for ( int i = 0; i < bookArray2.length; i++) {
bookArray2[i].showBookinfo();
}
bookArray1[0].setBookName("나목"); // bookArray1 배열의 첫번째
bookArray1[0].setAuthor("박완서"); // 요소 값 변경
System.out.println("===bookArray1===");
for ( int i = 0; i < bookArray1.length; i++) {
bookArray1[i].showBookinfo();
}
System.out.println("===bookArray2===");
for ( int i = 0; i < bookArray2.length; i++) {
bookArray2[i].showBookinfo(); // bookArray2 배열 요소 값도 변경되어 출력
}
}
}
깊은 복사
- 인스턴스를 따로 관리할 때 직접 인스턴스를 만들고 그 값을 복사
package array;
public class ObjectCopy3 {
public static void main(String[] args) {
Book[] bookArray1 = new Book[3];
Book[] bookArray2 = new Book[3];
bookArray1[0] = new Book("태백산맥", "조정래");
bookArray1[1] = new Book("데미안", "헤르만 헤세");
bookArray1[2] = new Book("어떻게 살것인가", "유시민");
bookArray2[0] = new Book(); //
bookArray2[1] = new Book(); //디폴트 생성자로 bookArray2의 배열 인스턴스 생성
bookArray2[2] = new Book(); //
for(int i = 0; i < bookArray1.length; i++) { //
bookArray2[i].setBookName(bookArray1[i].getBookName());//1을 2에 복사
bookArray2[i].setAuthor(bookArray1[i].getAuthor());//
}
for(int i= 0; i < bookArray2.length; i++) {
bookArray2[i].showBookinfo(); // bookArray2 출력
}
bookArray1[0].setBookName("나목"); // 첫번째 배열의
bookArray1[0].setAuthor("박완서"); // 요소 값 수정
System.out.println("===bookArray1===");
for(int i = 0; i < bookArray1.length; i++) {
bookArray1[i].showBookinfo();
}
System.out.println("===bookArray2===");
for(int i = 0; i < bookArray2.length; i++) {
bookArray2[i].showBookinfo();
}
}
}
얕은복사와 깊은복사의 차이??
- 깊은 복사에서는 디폴트 생성자를 사용하여 인스턴스를 생성하고 거기에 자료를 복사하는 방식?? (확실하지 않다.)
향상된 for문
- 배열의 처음 ~ 끝까지 모든 요소를 참조할 때 용이
다차원 배열
- 수학의 평면 ( x, y) 을 나타내는 것처럼 이차원 이상으로 구현하는 배열
이차원 배열
arr.length
- 행의 갯수
arr[i].length
- 열의 갯수
ArrayList 클래스
- 객체 배열을 고나리할 수 있는 멤버 변수와 메서드를 제공하는 클래스
ArrayList 중 주로 사용하는 메서드
- int size( ) - 배열에 추가된 요소 전체 개수를 반환
- E get(int index) - 배열의 index 위치에 있는 요소값을 반환
- boolean add(E e) - 요소하나를 배열에 추가
- boolean isEmpty( ) - 배열이 비어 있는지 확인
- E remove(int index) - 배열의 index위치에 있는 요소값을 제거하고 그 값을 반환
ArrayList 기본 형식
ArrayList<E> 배열 이름 = new ArrauList<E>();
- <E>는 객체의 자료형
임포트(import)
- 내 코드에 없는 클래스를 가져와 사용할 때 이 클래스가 어디에 구현되고 있는지를 알려주기 위해 코드 맨 위에 선언하는 것
- ArrayList를 사용하려면 'import java.util.ArrayList;' 문장을 반드시 작성해야 한다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
'Do it 자바프로그래밍 입문' 9장 정리 (0) | 2022.09.21 |
---|---|
'Do it 자바프로그래밍 입문' 8장 정리 (0) | 2022.09.19 |
'Do it 자바프로그래밍 입문' 6장 정리 (0) | 2022.09.08 |
'Do it 자바프로그래밍 입문' 5장 정리 (0) | 2022.09.06 |
'Do it 자바프로그래밍 입문' 4장 정리 (0) | 2022.09.03 |
댓글