배열(Array).
- 많은 수의 데이터를 다룰 때 자료를 순차적으로 관리하는 자료구조
- 각 데이터를 인덱스와 1:1 대응하도록 구성
- 데이터가 메모리 상에 연속적으로 저장되어 물리적 위치와 논리적 위치가 동일
배열의 선언과 초기화.
- 배열의 선언
자료형[] 배열 이름 = new 자료형[데이터 개수];
자료형 배열 이름[] = new 자료형[데이터 개수];
int[] numbers = new int[10];
- 인덱스 연산
[]는 배열 처음 선언 시 사용한 연산자로 배열 이름에 []를 사용하는 것을 인덱스 연산이라고 함
배열 요소의 저장된 메모리 위치를 찾아 주는 역할로
numbers[0] 은 numbers 배열의 0번째 인덱스 요소 값에 접근하는 것
- 배열의 초기화
배열을 선언하면 그와 동시에 각 요소의 값이 초기화 됨
정수는 0, 실수는 0.0, 객체 배열은 null로 초기화
int[] memberIDs = new int[] {101, 102, 103}; // 배열 개수 생략
int[] nums = {1, 2, 3}; // new int[] 생략 가능
int[] ids; // 배열 자료형 선언 후
ids = new int[] {1, 2, 3, 4, 5}; // 배열 할당, new int[] 생략 불가
- 배열의 출력
배열 객체를 그냥 출력하면 메모리상의 주소값을 반환하기 때문에
반복문이나 Arrays 클래스 내 메서드를 사용해 출력할 수 있다.
System.out.println(numbers); // [I@2f92e0f4 [I - 배열 int, @다음부터 주소값
// 반복문으로 직접 배열 원소 출력
for(int i = 0 ; i < numbers.length; i++){
System.out.print(numbers[i] + " ");
}
System.out.println();
// Arrays.toString() 메서드 사용해 출력
System.out.println(Arrays.toString(numbers)); // [100, 95, 80, 70, 60]
- 배열의 장점
인덱스를 이용해 데이터에 빠르게 접근할 수 있음
마지막 추가 인덱스 추가 및 삭제 시 빠르다. - 배열의 단점
정적 사이즈로 사이즈 불변.
가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성
데이터의 삽입 / 추가 / 삭제 시 새로운 배열을 생성해야하기 때문에 번거롭다 - 배열의 특징
Primitive type과 Object 둘다 가능
Generic 타입은 불가
ArrayList.
- 배열의 불편함을 개선하기 위해 ArrayList 사용
- Collection <- List <- Vector, ArrayList, LinkedList
ArrayList 주요 메서드
- 생성자
ArrayList<Integer> intArrayList = new ArrayList<>(); // 기본 크기가 10인 배열 생성
System.out.println(intArrayList.size()); // 0
ArrayList<String> stringArrayList = new ArrayList<>(15); // 기본 크기를 지정, 다 차면 기본 크기만큼 사이즈 증가
System.out.println(stringArrayList.size()); // 0
- 주요 메서드
// add, add(index, value)
stringArrayList.add("Mike");
stringArrayList.add(0, "James");
System.out.println(stringArrayList); // [James, Mike]
// get 해당 인덱스 값 반환
String str = stringArrayList.get(0);
String str1 = stringArrayList.get(1);
System.out.println(str); // James
System.out.println(str1); // Mike
// set 인덱스로 값 변경
stringArrayList.set(0, "Kiki");
System.out.println(stringArrayList); // [Kiki, Mike]
// indexOf 값을 제공하면 해당 값의 첫번째 인덱스를 반환
stringArrayList.add("AA");
stringArrayList.add("BB");
stringArrayList.add("AA");
System.out.println(stringArrayList); // [Kiki, Mike, AA, BB, AA]
System.out.println(stringArrayList.indexOf("AA")); // 2
// lastIndexOf 해당 값의 마지막 인덱스 반환
System.out.println(stringArrayList.lastIndexOf("Kiki")); // 0
System.out.println(stringArrayList.lastIndexOf("AA")); // 4
// remove(index), remove(value) 해당 인덱스 삭제, 해당 데이터 중 첫번째 값 삭제
stringArrayList.remove(0);
System.out.println(stringArrayList); // [Mike, AA, BB, AA]
stringArrayList.remove("AA");
System.out.println(stringArrayList); // // [Mike, BB, AA]
// contains(value) 값을 포함하는지 boolean으로 반환
System.out.println(stringArrayList.contains("BB")); // true
System.out.println(stringArrayList.contains("CC")); // false
// clear() 모두 삭제, isEmpty 배열 비었는지 확인
stringArrayList.clear();
System.out.println(stringArrayList.isEmpty()); // true
// size() 요소 개수 반환
System.out.println(stringArrayList.size()); // 0
Array와 ArrayList의 차이
- Array
사이즈 정적 / Primitive type, Object type 가능 / Generic 불가 / 초기화 시 메모리 할당 / 편의 기능 없음 - ArrayList
사이즈 동적 / Object type / Generic 가능 / 런타임 시 add와 같은 기능은 메모리 재할당으로 배열보다 느림, 접근성 동일 /
편의기능이 있음
'BACKEND > Data Structure & Algorithm' 카테고리의 다른 글
선형자료구조 - 데크/덱(Deque) (1) | 2023.05.19 |
---|---|
선형자료구조 - 큐(Queue) (0) | 2023.05.18 |
자료구조란 무엇이고 선형/비선형 자료구조란? (0) | 2023.05.17 |
선형자료구조 - 스택(Stack) (8) | 2023.05.16 |
선형자료구조 - 연결리스트(LinkedList) (1) | 2023.05.15 |