[Java] 배열(array), Arrays 클래스, ArrayList 클래스
by Choi HyeSun
배열(array)
-
같은 타입의 변수들로 이루어진 유한 집합
-
배열 요소(element) : 배열을 구성하는 각각의 값
-
인덱스(index) : 배열에서 위치를 가리키는 숫자
- 0 ~ (양의정수)
1차원 배열
- 1차원 배열의 예
다차원 배열
-
2차원 이상의 배열을 의미
-
배열 요소(Element)로 또 다른 배열을 의미
-
n차원 배열
-
배열 요소로 (n-1)차원 배열을 가지고 있음
-
2차원 배열의 예
배열의 복사
-
System 클래스의 arraycopy() 메소드
- 가장 성능이 좋음
-
Arrays 클래스의 copyOf() 메소드
- 가장 많이 쓰임(유연함)
-
Object 클래스의 clone() 메소드
- 배열 크기 조정 불가
-
for문 + index를 이용한 복사
-
Enhanced for문(참고)
-
배열과 컬렉션의 모든 요소를 참조하기 위한 반복문
-
명시한 배열이나 컬렉션의 길이만큼 반복되어 실행
-
loop마다 각 element는 명시한 변수의 이름으로 저장, 명령문에서 해당 변수를 사용하여 각 요소를 참조할 수 있음
-
Arrays 클래스
-
java.util.Arrays
-
java.util 패키지
-
java.lang 패키지 다음으로 가장 많이 사용되는 패키지
-
import문으로 패키지를 불러와야 클래스명만으로 사용할 수 있음
-
프로그램 개발시 사용할 수 있는 유틸리티 클래스가 다수 포함
-
-
Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함
- 모든 메소드는 클래스 메소드(static method)이므로 객체를 사용하지 않고 바로 사용 가능
-
유용한 메소드
메소드 | 설명 |
---|---|
static<T> List<T> asList(T…a) | 전달받은 배열을 고정 크기의 리스트(list)로 변화하여 반환 |
static int binarySearch(Object[] a, Object key) ex) Arrays.binarySearch(sunny, 10); |
전달받은 배열에서 특정 객체를 이진 검색 알고리즘을 사용하여 검색 후 그 위치를 반환 - 이진 검색을 사용하므로 정렬이 되어있어야 제대로 동작 |
static<T> T[] copyOf(T[] original, int newLength) ex) Arrays.copyOf(sunny1, 3); |
전달받은 배열을 특정 길이의 새로운 배열로 복사하여 반환 - 새로운 배열이 더 길 경우 기본값으로 셋팅 - 새로운 배열이 더 짧을 경우 값을 버림 |
static<T> T[] copyOfRange(T[] original, int from, int to) ex) Arrays.copyOfRange(sunny1, 2, 4); |
전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환 (복사대상배열, 복사시작인덱스, 복사끝+1인덱스) ex) sunny1[2] ~ sunny1[3] (4-1)까지 복사 |
static boolean equals(Object[] a, Object[] a2) ex) Arrays.equals(sunny1, sunny2); |
전달받은 두 배열이 같은지 확인 |
static void fill(Obect[] a, Object val) ex) Arrays.fill(sunny1, 7); |
전달받은 배열의 모든 요소를 특정 값으로 초기화 |
static void sort(Object[] a) ex) Arrays.sort(sunny1); |
전달받은 배열의 모든 요소를 오름차순으로 정렬 - 원본 배열의 순서를 변경 |
ArrayList<E> 클래스
List 컬렉션 클래스
-
List 인터페이스를 구현한 컬렉션 클래스
-
요소의 저장 순서 유지
-
같은 요소의 중복 저장 허용
-
종류(대표적)
-
ArrayList<E>
-
LinkedList<E>
-
Vector<E>
-
Stack<E>
-
-
자바의 Collection = 인터페이스 / Collections = 클래스
ArrayList<E> 클래스
-
ArrayList 클래스는 가장 많이 사용되는 컬렉션 클래스 중 하나
-
JDK 1.2부터 제공
-
내부적으로 배열을 이용하여 요소를 저장
-
배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있음
-
배열은 크기를 변경할 수 없는 인스턴스로, 크기를 늘릴 경우에는 새로운 배열을 생성하고 기존의 요소를 옮기게 되는데, 과정은 자동으로 수행하게끔 해주지만 단점인 긴 시간은 어쩔 수 없음
-
출력시 for문, enhanced for문, iterator() 메소드를 이용하는 방법 등 다양한 방법을 사용
Subscribe via RSS