반응형
시작하기 전에
자료구조(Data Structure)는 대량의 데이터를 효율적으로 관리할 수 있는 데이터의 구조를 의미합니다.
어떤 데이터 구조를 사용하느냐에 따라 코드의 효율, 메모리 사용량 등이 달라집니다. 그렇기 때문에 데이터 특성에 따라 체계적으로 데이터를 구조화하고 이를 자료구조라고 하게 된 것입니다.
이러한 자료구조에는 대표적으로 [배열, 큐, 스택, 링크드 리스트, 해쉬 테이블, 힙] 등이 있습니다.
이번 게시글에서는 배열에 대해서 알아보도록 하겠습니다.
01. 배열(Array)
배열은 데이터를 나열하고, 각 데이터를 인덱스(Index)에 대응하도록 구성한 데이터 구조입니다.
배열의 자세한 내용은 아래 링크를 참고해주세요.
https://kang-james.tistory.com/entry/%EB%B0%B0%EC%97%B4array?category=891355
1) 배열은 왜 필요할까?
- 같은 종류의 데이터를 효율적으로 관리하기 위해 사용
- 같은 종류의 데이터를 순차적으로 저장
장점 :
- 빠른 접근 가능
- 첫 데이터의 위치에서 상대적인 위치로 데이터 접근(인덱스 번호로 접근)
단점 :
- 데이터 추가/ 삭제 어려움
- 미리 최대 길이를 지정
* 참고 : [Primitive 자료형과 Wrapper 클래스 비교하기]
Java에서는 Primitive 자료형인 int와 Wrapper 클래스인 Integer가 있음.
- 둘 다 정수형 타입이지만, Wrapper 클래스를 사용 시 null을 용이하게 처리
- ArrayList 등 컬렉션 프레임워크에서 Primitive 자료형을 지원하지 않는 경우가 종종 있음
2) Java에서 제공하는 배열 클래스
배열은 우리가 직접 코드를 작성해서 구현할 수 있지만, 자바에서 배열을 손쉽게 다루기 위한 클래스 등을 제공하기도 합니다. 배열을 직접 다루는 내용은 java 기본 문법을 참고해주시면 되겠습니다. 여기서는 자바에서 제공하는 클래스를 알아보도록 하겠습니다.
① Arrays
- java.util 패키지에서 제공하는 클래스
import java.util.Arrays;
Integer[] data_list = {1,2,3,4,5};
System.out.println(Arrays.toString(data_list));
// [1,2,3,4,5]
# Arrays의 메서드
- asList()
- 배열을 List로 변환
- asList로 만들어진 List는 원소 추가(add)불가 및 값 변경 시 원본 배열 값도 변경된 - toString(), deepToString()
- 배열 element 출력
- 1차원 배열일 경우 toString 사용, 다차원 배열일 경우 deepToString 사용 - equals(), deepEqualse()
- 배열 비교
- 1차원 배열일 경우 equals, 다차원 배열일 경우 deepEqualse 사용 - copyOf(), copyOfRange()
- 배열 복사
- 원본 배열보다 큰 길이의 배열로 복사할 경우, 값이 없는 배열 값에 int는 0, String은 null로 채워짐 - fill()
- 배열 채우기 - sort()
- 배열 정렬 - binarySearch()
- 배열 검색
- 사용 전 배열이 정렬(sort)되어 있어야 함
Arrays의 자세한 메서드는 아래 링크를 참고해주세요.
https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html
② ArrayList
- java.util 패키지에서 제공하는 클래스
- 가변 길이의 배열 자료구조를 다룰 수 있는 기능 제공(배열 크기가 가변적)
- List 인터페이스를 상속
import java.util.ArrayList;
ArrayList<Integer> arr1 = new ArrayList<Integer>();
ArrayList<Integer> arr2 = new ArrayList<>(); // JDK 1.7부터 타입을 생략해도 됩니다.
ArrayList<Integer> arr3 = new ArrayList<>(10); // 초기 용량(Capacity) 설정
ArrayList<Integer> arr4 = new ArrayList<>(arr1); // 다른 Collection 값으로 초기화
ArrayList<Integer> arr5 = new ArrayList<>(Arrays.asList(1,2,3,4,5)); // Array.asList()로 인자 전달
# ArrayList의 메서드
- add(int i) : i 인덱스에 아이템 추가
- get(int i) : i 인덱스에 위치한 아이템 호출
- set(인덱스 위치, 데이터) : 특정 인덱스에 해당하는 아이템 변경 시 사용
- remove(int i) : i 인덱스의 아이템 삭제 -> 삭제 시에 뒤에 있는 인덱스의 아이템이 앞으로 이동
- size() : 배열 길이 확인
- clear() : 전체 삭제
# ArrayList 값 전체 출력
// colors라는 배열 생성
ArrayList<String> colors = new ArraysList<>(Arrays.asList("Black","white","Green","Red"));
배열 객체의 이름에는 대부분 s를 붙입니다.
// for-each loop
for (String color : colors) {
System.out.print(color + " ");
}
// for loop
for (int i = 0; i < colors.size(); ++i) {
System.out.print(colors.get(i) + " ");
}
// using iterator
Iterator<String> iterator = colors.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
// using listIterator
// 역방향으로 순회하고, 역방향으로 출력합니다.
ListIterator<String> listIterator = colors.listIterator(colors.size());
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + " ");
}
* 참고: [List와 ArrayList의 차이]
먼저 List는 인터페이스고, ArrayList는 클래스입니다.
따라서 List로 선언된 변수는 필요에 따라 다른 리스트 클래스를 쓸 수 있는 구현상의 유연성을 제공합니다.
다시 말해서 상황에 따라 클래스를 변경해서 쓸 수 있습니다.
3) 다차원 배열
- 2차원 배열
Integer[][] data_list {
{
{1,2,3}
{4,5,6}
}
}
- 3차원 배열 (3차원 이상의 배열도 가능)
Integer[][] data_list {
{
{7,8,9}
{10,11,12}
},
{
{1,2,3}
{4,5,6}
}
}
* 추가 포인트 : 특정 문자 위치 찾기 -> indexOf() , lastIndexOf()
indexOf()는 특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환하며,
만약 찾지 못했을 경우 "-1"을 반환합니다.
반응형
'개발 > DS&Algorithms' 카테고리의 다른 글
[자료구조] 연결 리스트(Linked List) 알아보기 (6) | 2022.04.01 |
---|---|
[자료구조] 큐(Queue)와 스택(Stack) 알아보기 (5) | 2022.03.30 |
[백준] 하노이 탑 이동 순서_11729_자바 (8) | 2022.02.23 |
[백준] 소인수분해_11653_자바 (4) | 2022.02.15 |
[백준] ACM 호텔_10250_자바 (0) | 2022.02.11 |