배열

jinkyung·2021년 1월 14일
0

JAVA2

목록 보기
4/35
package ex00.arr.array00;

/*
1. 배열의 의미
배 : 짝
열 : 나란히 줄서있다
배열 : 동일한 자료형들이 나란히 줄서있다(물리적으로 연속된 공간)

2. 배열의 필요성 - 왜 배열을 만들까?
 1)동일한 자료형이 여러 개 쓰일 때 한번에 만들고,
 2)반복문으로 접근하는 것이 편리하니까
*/
/*
형변환
1. 서로 다른 자료형끼리 연산할 일이 종종 있다
  그런데 서로 다른 자료형은 메모리에 저장되는 bit가 다르므로
 동일한 자료형으로 만들어줘야 연산이 가능하다
2. short < int < long < float < double
   1) 정수와 실수가 만나면 무조건 정수는 실수로 변화한다
   2) 같은 정수라도 작은 사이즈의 정수와 큰 사이즈의 정수가 만나면 
      큰 사이즈의 자료형으로 변화한다
   3) float와 double을 연산하면 float는 자동으로 double로 변화한다
3. 평균 계산시 제일 많이 쓰인다
    sum(int)/3(int) => 결과도 int
    (float)sum => float형으로 변화
    (float)sum/3 => 3도 float형으로 변화
    결국 float/float가 되어서 연산의 결과는 float가 된다
*/ 
public class WhyArray {
	public static void main(String[] args) {
		// 3명의 학생의 국어점수의 총합과 평균을 구하세요
		int kor0=99, kor1=98, kor2=80;
		int sum=0;
		float avg=0f;
		
		// 총합과 평균 계산
		sum = kor0+kor1+kor2;
		avg = (float)sum/3;		// sum/(float)3
		//avg = sum/3;	// 정수와 정수의 연산은 무조건 정수
		
		// 결과 출력
		System.out.println("총합 : " + sum);
		System.out.println("평균 : " + avg);
		
		
//		그렇다면 10명, 100명, 1000명일 때는?
//	    변수선언하기 싫어진다
//	    => 배열이 필요하다
	}
}

package ex00.arr.array01;

public class UsingArray {
	public static void main(String[] args) {
		int[] kor = {99, 98, 80};
//		int[] kor = new int[3] {99, 98, 80};
		int sum = 0;
		float avg = 0f;
		
//		index를 변수로 바꾸면 반복문도 가능하겠네?
//		System.out.println(kor[0]);
//		System.out.println(kor[1]);
//		System.out.println(kor[2]);
		/*
		= (대입연산자)
		1. 왼쪽 = 오른쪽
		  1) 왼쪽 : 변수의 공간
	      2) 오른쪽 : 변수의 값
        2. 마지막에 연산되는 연산자이다
        */
		for (int i = 0; i < kor.length; i++) {
			sum = sum + kor[i];
		}
		avg = (float)sum/kor.length;
//		297/3 => 297.0/3 => 297.0/3.0 => float결과
		
		System.out.println("총합 : " + sum);
		System.out.println("평균 : " + avg);
	}
}

스택은 공간이 힙보다 상대적으로 작다.

스택의 용도 : 그때 그때 필요한 것을 올려놓고 사용, 지역변수들 - 중괄호가 끝나는 지점에서 소멸.

힙 : new 라는 연산자(배열,객체)가 할당되는 공간 (덩어리가 큰 것들), jvm이 판단 -> 가비지 컬렉터(GC)가 처리.

배열 주소는 jvm에 의해서 해석되는 것 -- > kor에 들어있는 값은 참조값 = hashcode = reference value

jvm이 해석해주기 위한 위치값.

저 공간을 가리키는 걸로 해석해서 값을 얻어올수 있도록 해준다.


얕은복사

package ex00.arr.array03;

public class ArrayRef {
	
	static void viewArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();  // 개행해라
	}
	
	public static void main(String[] args) {
		//int[] kor = {99, 89, 80};  // 관습적으로 사용, new 생략
		//int[] kor = new int[] {99, 89, 80}; // 선언과 동시 초기화
		int[] kor = new int[3];	// 힙에 할당 후 저장
		kor[0] = 99;
		kor[1] = 89;
		kor[2] = 80;
		
		System.out.println("kor의 참조값 : " + kor);
		
		// 참조값만 복사, 결국 같은 위치를 가리키게 된다
		// 위치만 복사 => 얕은 복사
		int[] subject = kor;	
		System.out.println("subject의 참조값 : " + subject);
		
		viewArray(kor);
		viewArray(subject);
		
		subject[1] = 20;
		
		viewArray(kor);
		viewArray(subject);
	}
}

깊은 복사

: kor과 subject는 공간이 다르므로 서로 다른 참조값이 출력된다.

subject의 값만 20으로 바뀐다.

package ex00.arr.array04;

import java.util.Arrays;

public class DeepArrayCopy{
	
	static void viewArray(int[] arr) {
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();  
	}
	
	public static void main(String[] args) {

		int[] kor = new int[3];
		kor[0] = 99;
		kor[1] = 89;
		kor[2] = 80;
		
		System.out.println("kor의 참조값 : " + kor);
		
		// kor과 동일 자료형, 같은 크기의 새로운 공간을 할당해서 
		// 그 공간 참조값을 반환해준다.
		int[] subject =Arrays.copyOf(kor, kor.length);	
		System.out.println("subject의 참조값 : " + subject);
		
		viewArray(kor);
		viewArray(subject);
		
		subject[1] = 20;
		
		viewArray(kor);
		viewArray(subject);
	}
}

arraycopy() 메소드

package ex00.arr.array12;

import java.util.Arrays;

public class CopyOfArray {

	public static void main(String[] args) {
		int[] arr = {1, 2, 3, 4, 5};
		int[] temp = new int[5];
		int[] temp1 = new int[10];
		
		System.out.println(Arrays.toString(arr));
		System.out.println(Arrays.toString(temp));
		
		System.arraycopy(arr, 0, temp, 0, arr.length);
		
		System.out.println(Arrays.toString(arr));
		System.out.println(Arrays.toString(temp));
		System.out.println();
		
		System.arraycopy(arr, 0, temp1, 3, arr.length);
		
		System.out.println(Arrays.toString(arr));
		System.out.println(Arrays.toString(temp1));
	}

}

정렬

package ex00.arr.array05;

import java.util.Arrays;

public class ArraySort {

	public static void main(String[] args) {
		int[] scores = {98, 12, 99, 9, 25};
		System.out.println(Arrays.toString(scores));
		
		
		//정렬
		Arrays.sort(scores);
		System.out.println(Arrays.toString(scores));

//출력값
//[98, 12, 99, 9, 25]
//[9, 12, 25, 98, 99]
	}
}

배열의 for문

package ex00.arr.array06;

public class ForEach {

	public static void main(String[] args) {

	int[] scores = {89, 99, 21, 10, 100};
	
	//for문 접근
	for(int i = 0; i < scores.length; i++) {
		System.out.print(scores[i] + " " );
	}
	
	System.out.println();
	
	//forEach 접근 
	for(int score : scores) {
		System.out.print(score + " ");
	}	
 }
}

0개의 댓글

관련 채용 정보