٩(๑•̀o•́๑)و

20200303 본문

Java

20200303

11mia 2020. 3. 3. 01:34

배열 

  • 자료구조의 일종
  • 동일한 자료형의 순차적 자료 구조
  • 동일한 자료를 순차적으로 관리하는 가장 기본적인 자료구조
  • 물리적인 위치와 논리적인 위치가 동일. 쭉 연달아 생성 (linked list는 일치하지 않음)
  • index는 0 ~ length-1
  • fixed length. 만일 길이가 다 찬다면 더 큰 배열을 생성하여 복사하여 사용. 처음에 넉넉하게 할당해야함
  • 연속된 자료구조 - 0~length-1 까지의 element  중 중간에 값이 비어있는 element가 생기면 안된다! 거기를 끝으로 인식하기때문에 반드시 뒤쪽의 값들을 앞으로 땡겨서 빈자리를 채워줘야함. 중간에 값을 끼워넣고싶다면 그 이후값들을 쭉쭉 뒤로 밀어줘야함
  • 첨자 연산(ex. arr[2])이 유리함. 연속적이기때문에 offset과 0번째 element의 주소를 알고있다면 굉장히 빠르게 연산 가능
  • JDK에서는 ArrayList로 배열을 구현해둠. fixed length로 인한 여러가지가 처리가 다 구현이 되어있음.

 

참조 자료형 배열 = 객체 배열

  • 객체를 배열로 선언
  • 기본값이 null - 객체의 주소를 담게됨

 

System.arraycopy(src,srcPos,dest,destPos,length)

 : src배열의 srcPos부터 length개를 dest의 destPos이후로 복사. (System 클래스의 static 메서드)

향상된 for문 (enhanced for)

  • 배열 요소의 처음부터 끝까지 모든 요소를 참조할 때 편리한 반복문
  • for(변수:배열){ 반복실행문; }
  • ex. for( int i : arr){} - 이때 arr int[]여야함

객체 배열 복사

  1. 얕은 복사 : src배열에서 dest배열로 복사시 인스턴스까지 새로 복제가 되어서 할당되는 것이 아님. 인스턴스의 주소만 복사. 따라서 src와 dest 두 객체 배열에서는 같은 인스턴스를 가리키게됨 
  2. 깊은 복사 : 두 객체 배열이 가리키는 인스턴스가 다름. 이 경우에는 System.arraycopy를 사용하면 안됨. 인스턴스를 하나하나 만들어서 값을 대입해줘야함. 이 경우에는 두 객체 배열이 가리키는 인스턴스가 구별되기때문에 서로 영향을 주지 않음. 

얕은 복사
깊은 복사

다차원 배열

  • 2차원 이상의 배열
  • 지도, 게임, 평면이나 공간을 구현할 때 사용
  • 자료형[][] 배열이름 = new 자료형[행갯수][열갯수]; (행 : row, 열 : column)
  • 행을 기준으로 열을 돌리는 식으로 쭉 접근 가능
  • 메모리에는 일렬로 연결되어있다. 

ArrayList

  • 객체 배열을 쉽게 사용하기 위해 자바에서 제공해주는 클래스(객체 배열이 구현된 클래스)
  • 객체 배열을 사용하는데 필요한 여러 메서드들이 구현되어있음
  • ArrayList를 사용할때 어떤 객체를 사용할지를 <> 안에 써줘야한다. (ex. ArrayList<String> list = new ArrayList<String>(); )
  • <>안에 타입을 지정하지 않을 경우에는 Object 타입으로 들어가기때문에 형변환이 필요하게됨

 

[ArrayList의 주요 메서드]

  1. boolean add(E e) : 요소 하나를 배열에 추가
  2. int size() : 배열에 추가된 요소 전체 개수 반환. element가 들어있는 수를 반환. (cf. 배열.length는 element의 수에 관계없이 fixed length를 반환)
  3. E get(int index) : 배열의 index위치에 있는 요소값을 반환
  4. E remove(int index) : 배열의 index위치에 있는 요소값을 제거하고 그 값을 반환
  5. boolean isEmpty() : 배열이 비어있는지 확인

 

ArrayList 주요 메서드

'Java' 카테고리의 다른 글

20200307 - 인터페이스  (0) 2020.03.07
20200306  (0) 2020.03.06
20200305  (0) 2020.03.06
20200304  (0) 2020.03.05
20200301  (0) 2020.03.01