Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Wrapper class
- node.js
- 엔드포인트
- 파이참
- public static final
- parameter group
- Java
- shebang
- has-a
- access modifier
- identityHashCode
- 스트림
- constructor
- 자바
- 내부클래스
- Stream
- extends
- 깊은 복사
- dbeaver
- down casting
- generic programming
- Inbound
- pycharm
- singletone
- 셔뱅
- 얕은 복사
- finalize
- lambda
- arraycopy
- Up Casting
Archives
- Today
- Total
٩(๑•̀o•́๑)و
20200303 본문
배열
- 자료구조의 일종
- 동일한 자료형의 순차적 자료 구조
- 동일한 자료를 순차적으로 관리하는 가장 기본적인 자료구조
- 물리적인 위치와 논리적인 위치가 동일. 쭉 연달아 생성 (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[]여야함
객체 배열 복사
- 얕은 복사 : src배열에서 dest배열로 복사시 인스턴스까지 새로 복제가 되어서 할당되는 것이 아님. 인스턴스의 주소만 복사. 따라서 src와 dest 두 객체 배열에서는 같은 인스턴스를 가리키게됨
- 깊은 복사 : 두 객체 배열이 가리키는 인스턴스가 다름. 이 경우에는 System.arraycopy를 사용하면 안됨. 인스턴스를 하나하나 만들어서 값을 대입해줘야함. 이 경우에는 두 객체 배열이 가리키는 인스턴스가 구별되기때문에 서로 영향을 주지 않음.
다차원 배열
- 2차원 이상의 배열
- 지도, 게임, 평면이나 공간을 구현할 때 사용
- 자료형[][] 배열이름 = new 자료형[행갯수][열갯수]; (행 : row, 열 : column)
- 행을 기준으로 열을 돌리는 식으로 쭉 접근 가능
- 메모리에는 일렬로 쭉 연결되어있다.
ArrayList
- 객체 배열을 쉽게 사용하기 위해 자바에서 제공해주는 클래스(객체 배열이 구현된 클래스)
- 객체 배열을 사용하는데 필요한 여러 메서드들이 구현되어있음
- ArrayList를 사용할때 어떤 객체를 사용할지를 <> 안에 써줘야한다. (ex. ArrayList<String> list = new ArrayList<String>(); )
- <>안에 타입을 지정하지 않을 경우에는 Object 타입으로 들어가기때문에 형변환이 필요하게됨
[ArrayList의 주요 메서드]
- boolean add(E e) : 요소 하나를 배열에 추가
- int size() : 배열에 추가된 요소 전체 개수 반환. element가 들어있는 수를 반환. (cf. 배열.length는 element의 수에 관계없이 fixed length를 반환)
- E get(int index) : 배열의 index위치에 있는 요소값을 반환
- E remove(int index) : 배열의 index위치에 있는 요소값을 제거하고 그 값을 반환
- boolean isEmpty() : 배열이 비어있는지 확인