본문 바로가기

개발일지/JAVA

(항해99)Java 문법 종합반 2주차 정리(2)

<2주차(2)>
배열 개념소개 및 선언 조회 실습, 얕은 복사&깊은 복사&string배열, 다차원 배열 및 배열 실습, 컬랙션 소개, 컬랙션 List, 컬랙션 Stack&Queue&Set&Map

 

  • 배열복사 (얕은 복사, 깊은 복사)
  •      얕은 복사

- 배열은 참조형 변수이며 실제값이 아닌 실제값의 주소값을 가짐

- 따라서 배열 변수간에 대입 연산자 = 를 사용해서 복사를 하게 되면 주소값만 복사됨

- 이렇게 주소값만 복사되고 실제값은 1개로 유지되는걸 얕은 복사 라고 함

// 얕은 복사

int[] a = { 1, 2, 3, 4 };
int[] b = a; // 얕은 복사

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)

System.out.println(a[0]); // 출력 3  <- a 배열의 0번째 순번값도 3으로 조회됩니다.
  •      깊은 복사

- 얕은 복사처럼 가짜 복사가 아니라 진짜 새로운 배열을 똑같이 만들고 싶을때 깊은 복사 사용

- 깊은 복사는 결국 실제 값을 가지고 있는 배열의 기본형 값을 꺼내서 복사

- 반복문 for 문 을 통해서 하나씩 꺼내서 복사해주는 방법과 여러 메서드를 사용하는 방법이 있음

// 깊은 복사

int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length]; 

for (int i = 0; i < a.length; i++) {
    b[i] = a[i]; // 깊은 복사
}

b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)

System.out.println(a[0]); // 출력 1 <- 깊은 복사를 했기때문에 a 배열은 그대로 입니다.

 

 

  • Stack

- Last-In-First-out : 나중에 들어간 것이 가장 먼저 나옴

- 기능

    - 선언 : `Stack<Integer> intStack` 형태로 선언

    - 생성 : `new Stack<Integer>();` 형태로 생성

    - 추가 : `intStack.push({추가할 값})` 형태로 값을 추가

    - 조회 : `intStack.peek()` 형태로 맨 위값을 조회

    - 꺼내기 : `intStack.pop()` 형태로 맨 위값을 꺼냄 (꺼내고나면 삭제됨)

 

  • Queue

- First In First Out : 먼저들어간 순서대로 값을 조회

- `Queue` 는 생성자가 없는 껍데기라서 바로 생성할수는 없음 (껍데기 = 인터페이스)

- 생성자가 존재하는 클래스인 `LinkedList` 를 사용하여 `Queue` 를 생성해서 받을 수 있음

- 기능

    - 선언 : `Queue<Integer> intQueue` 형태로 선언

    - 생성 : `new LinkedList<Integer>();` 형태로 생성

    - 추가 : `intQueue.add({추가할 값})` 형태로 값을 맨 위에 추가

    - 조회 : `intQueue.peek()` 형태로 맨 아래값을 조회

    - 꺼내기 : `intQueue.poll()` 형태로 맨 아래값을 꺼냄 (꺼내고나면 삭제됨)

 

  • Set

- `Set` 은 그냥 `Set`으로 쓸수도있지만 `HashSet`, `TreeSet` 등으로 응용하여 사용할 수 있음

- `Set` 는 생성자가 없는 껍데기라서 바로 생성할수는 없음 (껍데기 = 인터페이스)

- 생성자가 존재하는 클래스인 `HashSet` 를 사용하여 `Set` 를 생성해서 받을 수 있음

- 기능

    - 선언 : `Set<Integer> intSet` 형태로 선언

    - 생성 : `new HashSet<Integer>();` 형태로 생성

    - 추가 : `intSet.add({추가할 값})` 형태로 값을 맨 위에 추가

    - 조회 : `intSet.get({초회할 순번})` 형태로 순번에 있는 값을 조회

    - 삭제 : `intSet.remove({삭제할 값})` 형태로 삭제할 값을 직접 지정

    - 포함확인 : `intSet.contains({포함확인 할 값})` 형태로 해당값이 포함되어있는지 boolean 값으로 응답 받음