본문 바로가기

개발/DS&Algorithms

[자료구조] 배열(array) 알아보기

반응형

 시작하기 전에


자료구조(Data Structure)대량의 데이터를 효율적으로 관리할 수 있는 데이터의 구조를 의미합니다.
어떤 데이터 구조를 사용하느냐에 따라 코드의 효율, 메모리 사용량 등이 달라집니다. 그렇기 때문에 데이터 특성에 따라 체계적으로 데이터를 구조화하고 이를 자료구조라고 하게 된 것입니다.

이러한 자료구조에는 대표적으로 [배열, 큐, 스택, 링크드 리스트, 해쉬 테이블, 힙] 등이 있습니다. 

이번 게시글에서는 배열에 대해서 알아보도록 하겠습니다.

 


01. 배열(Array)


배열은 데이터를 나열하고, 각 데이터를 인덱스(Index)에 대응하도록 구성한 데이터 구조입니다.


배열의 자세한 내용은 아래 링크를 참고해주세요.

https://kang-james.tistory.com/entry/%EB%B0%B0%EC%97%B4array?category=891355 

 

배열(array)

배열이란? · 동일한 자료형의 순차적 자료 구조 · 인덱스 연산자 [ ] 를 이용하여 빠를 참조 가능 → (배열에서 인덱스 연산자를 쓸 때, 위치는 0부터 시작)  배열의 맨끝 위치는 n-1에 해당 →  

kang-james.tistory.com


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

 

Arrays (Java Platform SE 7 )

Returns a string representation of the "deep contents" of the specified array. If the array contains other arrays as elements, the string representation contains their contents and so on. This method is designed for converting multidimensional arrays to st

docs.oracle.com

 

② 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"을 반환합니다.
반응형