728x90
반응형
Array 배열
같은 타입의 여러개 값을 효과적으로 관리하기 위한 객체(참조타임으로 주소값을 리턴)
1. 일차원 배열
▶︎ 선언방법
<선언방법.01>
int[] a; // 선언
a = new int[5]; // 정의
a[0]=1; // 초기화(값 넣기)
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;
<선언방법.02>
int[] b = new int[] {6, 7, 8, 9, 10}; // 선언, 정의, 초기화
<선언방법.03>
int[] c = {5, 4, 3, 2, 1}; // 선언, 초기화
▶︎ 문자열
public static void main(String[] args) {
String[] q = new String[] {"have", "a", "nice", "day"};
prn(q); //배열값 출력
modi(q); //수정한 배열값 출력
}
// 배열값 출력 메소드
public static void prnString(String[] arr) {
for(int i=0; i<arr.length; i++) {
System.out.printf("%s ", arr[i]);
}
System.out.println();
}
// 배열값 수정 후 출력하는 메소드
public static void modi(String[] test) {
//nice를 good으로 바꿔서 전체 출력
test[2] = "good";
for(int i =0; i<test.length; i++) {
System.out.print(test[i]+" ");
}
}
// prn(q) 결과
have a nice day
// modi(q) 결과
have a good day
2. 다차원 배열
▶︎ 선언방식
<선언방식.01>
int[][] a = new int[3][2];
a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;
a[1][1] = 4;
a[2][0] = 5;
a[2][1] = 6;
<선언방식.02>
int[][]b= new int[3][];
b[0] = new int[3];
b[1] = new int[5];
b[2] = new int[2];
<선언방식.03>
int[][]c= new int[][] {
{1, 2},
{3, 4, 5, 6},
{7, 8, 9}
};
<선언방식.04>
int[][] d = {{1,2,3,4,},{5},{6,7},{8,9,10}};
▶︎ 출력(선언방식.04를 출력해보도록 하자)
public static void prn(int[][] arr) {
for(int i=0; i<arr.length; i++) {
// System.out.println(arr[i]);
for(int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
test(s);
}
// 출력값 : 큰 배열안에 작은 배열이 들어가 있다.
1 2 3 4
5
6 7
8 9 10
▶︎ 문자열
public static void main(String[] args) {
String[][] s= {
{"Have", "a", "Good","Day"},
{"너무", "어려워"},
{"배열", "이차원 배열"}
};
test(s);
}
public static void test(String[][] arr) {
//Good -> Nice
//어려워 -> 쉬워
//전체 출력
arr[0][2] = "Nice";
arr[1][1] = "쉬워";
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
- 연습문제
1) 반복문을 사용하여 a~z까지의 'char'값을 가지는 1차원 배열을 만들자.
2) 위에서 만든 배열을 아래 형태로 출력하자
3) 거꾸로 출력하자.
package com.test01;
public class MTest03_Answer {
public static void main(String[] args) {
//1. a~z까지의 'char'값을 가지는 1차원 배열을 만들자.
//단, 반복문을 사용하자
char[] ch = new char[26];
for(int i = 0; i<ch.length; i++) {
ch[i] = (char)('a'+i);
}
//2. 위에서 만든 배열을 아래 형태로 출력하자
/*
* a b c d e f
* g h i j k l
* m n o p q r
* s t u v w x
* y z
*/
prn(ch);
//3. 거꾸로 출력하자.
/*
* z y x w v u
* ...
* b a
*/
reversePrn(ch);
//prn2(num);
//4. 대문자로 출력하자.
//Character.isUpperCase(prn3(num));
upperPrn(ch);
}
private static void prn(char[] ch) {
for(int i =1; i<=ch.length; i++) {
System.out.print(ch[i-1]+" ");
if(i%6==0) {
System.out.println();
}
}
System.out.println("\n");
}
private static void reversePrn(char[] ch) {
int temp = 1;
for(int i = ch.length; i>0; i--) {
System.out.print(ch[i-1]+ " ");
if(temp%6==0) {
System.out.println();
}
temp++;
}
System.out.println("\n");
}
private static void upperPrn(char[] ch) {
for(int i = 1; i<=ch.length; i++) {
System.out.print(Character.toUpperCase(ch[i-1])+ " ");
if(i%6==0) {
System.out.println();
}
}
System.out.println("\n");
}
}
// 출력값
a b c d e f
g h i j k l
m n o p q r
s t u v w x
y z
z y x w v u
t s r q p o
n m l k j i
h g f e d c
b a
A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z
3. 복사
Shallow Copy : 얕은 값 복사(주소값 복사/ 같은 배열)
public class MTest01 {
// Shallow Copy : 얕은 값 복사(주소값 복사)
public static void main(String[] args) {
int[] originalArr = {10, 20, 30};
int[] copyArr = originalArr;
System.out.println(Arrays.toString(originalArr));
System.out.println(Arrays.toString(copyArr));
System.out.println(originalArr == copyArr);
copyArr[1]=100;
System.out.println(Arrays.toString(originalArr));
System.out.println(Arrays.toString(copyArr));
System.out.println(Arrays.hashCode(originalArr));
System.out.println(Arrays.hashCode(copyArr));
}
}
// 결과값
[10, 20, 30]
[10, 20, 30]
true
[10, 100, 30]
[10, 100, 30]
42531
42531
Deep Copy : 값 자체를 복사해서 새로운 배열 생성(다른 배열)
public class MTest02 {
// Deep copy : 값 자체를 복사해서 새로운 배열 생성
public static void main(String[] args) {
int[] originalArr = {10,20,30,40};
//1. 배열 인덱스의 값을 복사
int[] copyOne = new int[originalArr.length];
for(int i = 0; i < copyOne.length; i++) {
copyOne[i] = originalArr[i];
}
System.out.println(Arrays.toString(originalArr));
System.out.println(Arrays.toString(copyOne));
System.out.println(originalArr==copyOne);
copyOne[1]=100;
System.out.println(Arrays.toString(originalArr));
System.out.println(Arrays.toString(copyOne));
//2. 원본 배열에게 요청
int[] copyTwo = originalArr.clone();
System.out.println(Arrays.toString(originalArr));
System.out.println(Arrays.toString(copyTwo));
System.out.println(originalArr==copyTwo);
copyTwo[1]=100;
System.out.println(Arrays.toString(originalArr));
System.out.println(Arrays.toString(copyTwo));
//3. System.을 사용하여 복사
int[] systemArray = new int[10];
Arrays.fill(systemArray, 7);
System.out.println(Arrays.toString(systemArray));
// System.arrayCopy 메소드 찾기
/* 원본 배열 객체(src)
* 원본 시작 위치(srcPos)
* 복사 배열 객체(dest)
* 복사 시작 위치(destPos)
* 복사할 갯수(length)
*
*/
System.arraycopy(originalArr, 1, systemArray, 3, 2);
System.out.println(Arrays.toString(systemArray));
System.out.println("--------------------------------");
System.out.println(originalArr.hashCode());
System.out.println(copyOne.hashCode());
System.out.println(copyTwo.hashCode());
System.out.println(systemArray.hashCode());
//다른 위치에 저장되어 잇어서 주소값이 다 다름!
}
}
// 결과값
[10, 20, 30, 40]
[10, 20, 30, 40]
false
[10, 20, 30, 40]
[10, 100, 30, 40]
[10, 20, 30, 40]
[10, 20, 30, 40]
false
[10, 20, 30, 40]
[10, 100, 30, 40]
[7, 7, 7, 7, 7, 7, 7, 7, 7, 7]
[7, 7, 7, 20, 30, 7, 7, 7, 7, 7]
--------------------------------
2018699554
1311053135
118352462
1550089733
728x90
반응형
'Language > Java' 카테고리의 다른 글
[JAVA]메모리영역_string pool_garbagecollection (0) | 2020.10.22 |
---|---|
[JAVA]제어문_조건문 (0) | 2020.10.22 |
[JAVA]Calendar03_api사용하여 달력만들기 (0) | 2020.10.20 |
[JAVA]Calendar02_달력만들기 (0) | 2020.10.20 |
[JAVA]Calendar01_년,월,일구하기 (0) | 2020.10.20 |