개발/Java & Kotlin

[Java] 기본 자료구조

devhooney 2022. 7. 8. 23:14
728x90

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리

 

2-1 배열

자료구조

- 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계

- 데이터 단위는 데이터를 구성하는 한 덩어리

- 자료구조는 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법을 뜻함

 

배열

배열 요소의 최댓값 구하기

class MaxofArray {
    static int maxOf(int[] a) {
        int max = a[0];
       	for (int i = 1; i < a.length; i++) {
        	if (a[i] > max) {
                max = a[i];
            }
        }
    	return max;
    }

	public static void main(String[] args) {
    	int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9}
    	int max = maxOf();
    }
}

 

난수 사용해 배열의 요솟값 설정하기

class MaxOfArrayRand {	
	public static void main(String[] args) {
    	Random rand = new Random();
        int[] array = new int[5];
        
        for (int i = 0; i < array.length; i++) {
			array[i] = 100 + rand.nextInt(90);        	
        }
        
        System.out.println("최대값은 " +maxOf(array));
	}
    
    static int maxOf(int[] a) {
		int max = a[0];
        for (int i = 1; i < a.length; i++) {
        	max = a[i];
        }
        return max;
    }
}

 

- 연습문제

Q1 키뿐만 아니라 사람 수도 난수로 생성하는 프로그램 작성

class MaxOfArrayRand {	
	public static void main(String[] args) {
    	Random rand = new Random();
        int[] array = new int[rand.nextInt(20) + 1];
        
        for (int i = 0; i < array.length; i++) {
			array[i] = 100 + rand.nextInt(90);        	
        }
        
        System.out.println("최대값은 " +maxOf(array));
	}
    
    static int maxOf(int[] a) {
		int max = a[0];
        for (int i = 1; i < a.length; i++) {
        	max = a[i];
        }
        return max;
    }
}

 

배열 요소를 역순으로 정렬하기

static void swap(int[]a, int idx1, int idx2) {
	int t = a[idx1]; 
    a[idx1] = a[idx2];
    a[idx2] = t;
}

static void reverse(int[] a) {
	for (int i = 0; i < a.length; i++) {
		swap(a, i, a.length-i-1);
    }
}

public static void main(String[] args) {
	int[] x = {12, 13, 14, 15, 16};
    reverse(x);
}

 

- 연습문제

Q2 배열 요소를 역순으로 정렬하는 과정을 하나하나 나타내는 프로그램 작성

static void swap(int[] a, int idx1, int idx2) {
	int t = a[idx1]; 
    a[idx1] = a[idx2];
    a[idx2] = t;
}

static void reverse(int[] a) {
	System.out.println(a);

	for (int i = 0; i < a.length; i++) {
		swap(a, i, a.length-i-1);
    	System.out.println(a[idx1] + "과(와) " + a[idx2] + "를 교환합니다.");
        
    }
}

public static void main(String[] args) {
	int[] x = {5, 10, 73, 2, -5, 42};
    reverse(x);
}

 

두 배열의 비교

static boolean equals(int[] a, int[] b) {
	if (a.length != b.length) return false;
    
    for (int i=0; i < a.length; i++) {
    	if (a[i] != b[i]) return false;
    }
    
    return true;
}

public static void main(String[] args) {
	int[] a = {1, 2, 3, 4, 5};
    int[] b = {1, 2, 3, 4, 6};
    
    System.out.println(equals(a, b));
}

- 연습문제

Q4 배열 b의 모든 요소를 배열 a에 복사하는 메소드 작성

static void copy(int[] a, int[] b) {
	a = b;
	for (int i=0; i<a.length; i++) {
    	System.out.println(a[i]);
        System.out.println(b[i]);
    }
}

public static void main(String[] args) {
	int[] a = {1, 2, 3, 4, 5};
    int[] b = {1, 2, 3, 4, 6};
    copy(a, b);
    
}

 

다차원 배열

- Java는 2차원 배열을 '배열의 배열'로 생각하고, 3차원 배열을 '배열의 배열의 배열로 생각함.

 

2-2 클래스

- 클래스는 임의의 데이터형을 자유롭게 조합하여 만들 수 있는 자료구조

 

클래스의 보충 설명

- 클래스 본체와 멤버

1. 클레스 본체에서는 멤버, 클래스 초기화/인스턴스 초기화, 생성자를 선언할 수 있다.

2. 필드/메소드/생성자를 선언할 때 public/private/protected를 지정할 수 있다.

3. 메소드/생성자는 다중으로 정의할 수 있다.(오버로드)

4. final로 선언한 필드는 변경할 수 없다.

5. 생성자는 새로 생성한 인스턴스의 초기화를 위해 사용된다.

 

728x90

'개발 > Java & Kotlin' 카테고리의 다른 글

[Java] 스택과 큐  (0) 2022.07.10
[Java] 검색  (0) 2022.07.10
[Java] 기본 알고리즘  (0) 2022.07.07
[Spring] 스프링 시큐리티 (2)  (0) 2022.07.05
[Spring] 스프링 시큐리티 (1)  (0) 2022.07.04