Java의 배열은 C의 배열과 같게 동일한 자료형의 데이터를 순차적으로 넣는 구조이다.
배열은 물리적 위치와 논리적 위치가 동일하며 위치의 시작은 0부터 시작한다.
자바에서는 객체 배열을 구현한 ArrayList를 많이 활용한다.
int[] arr1 = new int[10];
int arr2[] = new int[10];
// 방법1
int[] numbers = new int[] {10, 20, 30}; //개수 생략해야 함
// 방법2
int[] numbers = {10, 20, 30}; // new int[] 생략 가능
// 방법3
int[] ids;
ids = new int[] {10, 20, 30}; // 선언후 배열을 생성하는 경우는 new int[] 생략할 수 없음
package ch20;
public class ArrayTest {
public static void main(String[] args) {
// int[] arr = new int[] {1,2,3,4,5,6,7,8,9,10};
int[] arr = new int[10];
// 배열은 생성과 동시에 초기화가된다.
// int는 0, double은 0.0, 객체는 null로 초기화됨
int total = 0;
for(int i=0, num=1; i<arr.length; i++) {
arr[i] = num++;
}
for (int num : arr) {
// for는 배열의 n개 요소를 0 부터 n-1까지 순차적으로 순회할 때 간단하게 사용할 수 있다.
//arr의 있는게 하나씩 num으로 해서 돌아감
total += num;
}
System.out.println(total);
}
}
Book.java
package ch21;
public class Book {
private String title;
private String author;
public Book() {
}
public Book(String title, String author) {
this.title = title;
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public void showInfo() {
System.out.println(title + ", " + author);
}
}
BookTest.java
package ch21;
public class BookTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book[] library = new Book[5];
for(int i=0; i<library.length;i++) {
library[i] = new Book("태백산맥"+i, "조정래");
}
for(Book book: library) {
System.out.println("\n"+ book);
book.showInfo();
}
}
}
자바에서 제공하는 배열 복사 메서드 System.arrayCopy(src, srcPos, dest, destPos, length)를 사용하여 하는 복사.
객체의 주소값만 복사를 하여 두개의 배열이 하나의 객체를 가르키게 한다.
package ch21;
/*
* 주소값만 복사를 하여 같은 주소를 가리키게하는 얕은 복사
* */
public class ObjectCopyTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book[] library = new Book[5];
Book[] copyLibrary = new Book[5];
for(int i=0; i<library.length;i++) {
library[i] = new Book("태백산맥"+i, "조정래");
}
// System.arrayCopy(src, srcPos, dest, destPos, length)
System.arraycopy(library, 0, copyLibrary, 0, 5);
// 얕은 카피로 주소만 복사된다.
// 깊은 복사를 하려면 10~12번째줄처럼 따로 인스턴스를 만들고 값만 따로 복사를 해줘야한다.
System.out.println("==Library==");
for(Book book: library) {
System.out.println(book);
book.showInfo();
}
System.out.println("\n== Copy Library==");
for(Book book: copyLibrary) {
System.out.println(book);
book.showInfo();
}
}
}
package ch21;
/*
* 주소값까지 다르게 새로운 인스턴스를 생성하는 깊은 복사
* */
public class ObjectCopyTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Book[] library = new Book[5];
Book[] copyLibrary = new Book[5];
for(int i=0; i<library.length;i++) {
library[i] = new Book("태백산맥"+i, "조정래");
}
for(int i=0; i<copyLibrary.length;i++) {
copyLibrary[i] = new Book();
}
for (int i=0; i<copyLibrary.length; i++) {
copyLibrary[i].setTitle(library[i].getTitle());
copyLibrary[i].setAuthor(library[i].getAuthor());
}
System.out.println("==Library==");
for(Book book: library) {
System.out.println(book);
book.showInfo();
}
System.out.println("\n== Copy Library==");
for(Book book: copyLibrary) {
System.out.println(book);
book.showInfo();
}
}
}