자료구조 & 알고리즘

[Java] 배열(Array)

2023. 4. 20. 13:19
목차
  1. 1. 배열이란?
  2. 인덱스(index)
  3. 배열의 장점
  4. 배열의 단점
  5. 2. 배열 선언 방법
  6. Default  값( 초기값 )
  7. 3. 예제로 배열 다루기
  8. 1) 초기화
  9. 2) 인덱스
  10. 3) arr.length
  11. 4) 향상된 for문
  12. 5) String 형 배열
  13. 4. 배열 복사
  14. 방법 1) 똑같이 복사 clone()
  15. 방법 2) Arrays.copyOf()
  16. 방법 3) Arrays.copyOfRange()
  17. 방법 4) System.arraycopy()

1. 배열이란?


  • 동일한 자료형(Type)의 데이터를 하나의 연속된 공간에 저장하는 자료구조이다.
  • 각 데이터의 저장 위치는 index(0부터 시작)를 부여해 접근한다.
  • 정해진 크기의 메모리를 먼저 할당받아 사용한다. 즉, 선언할 때 크기를 미리 지정해야한다.
  • 한번 선언하면 이후에 크기를 변경할 수 없다.
  • 비어있는 인덱스가 존재해서는 안된다.
  • 만약 특정한 값으로 초기화하지 않은 배열 안의 데이터를 참조하면 예외가 발생한다.


인덱스(index)

인덱스는 배열의 각 저장 위치를 가리키는 0부터 1씩 증가하는 값이다.
배열 이름 옆에 대괄호[ ]에 기입한다.

int[] arr = new int[5];

arr이라는 이름의 배열이 있고, 5개의 저장공간을 갖는다.
첫번째 저장공간의 값을 가져올때는 arr[0], 두번째는 arr[1], 세번째는 arr[2]...와 같이 표현한다.

크기가 5이면 항상 마지막 인덱스는 크기 - 1 인 4이다.

 


배열의 장점

인덱스를 이용하여 데이터에 빠르게 접근할 수 있다.

배열은 연속된 공간에 저장되기 때문에 한번 배열의 데이터에 접근하면 같은 배열의 다른 데이터에 접근할때 빠르게 접근 할 수있다.

배열의 단점

데이터의 추가, 삭제, 변경, 배열의 크기 변경 등이 유연하지 않다.

  • 배열을 선언할 때 크기를 한번 정하면 수정할 수 없다.
  • 만약 배열의 길이를 늘려야한다면 새로운 길이를 가진 새로운 배열을 생성하여 기존 배열의 데이터를 옮겨줘야 한다.
  • 데이터 삭제 시, 해당 인덱스의 빈 공간을 유지한다.

 

2. 배열 선언 방법


1) 크기를 지정하여 선언 후 값 입력

가장 많이 사용하는 방법이다.

int[] arr1 = new int[3];
arr1[0] = 100;
arr1[1] = 200;
arr1[2] = 200;

2) 배열 선언과 동시에 초기값 대입

int arr2[] = { 100, 200, 300, 400 };

3) 배열 선언과 동시에 new 연산자와 함께 초기값 대입

int arr3[] = new int[] { 100, 200, 300 };

4) 배열 선언을 먼저 한 뒤 초기값 대입

int arr4[];
arr4 = new int[] { 100, 200 };

5) 2차원 배열 초기화 1

int[][] arr1 = new int[3][4];

6) 2차원 배열 초기화 2

int[][] arr2 = { { 1, 2, 3, 4 },
                { 5, 6, 7, 8 },
                { 9, 10, 11, 12 } };

배열 변수는 참조변수 이므로 배열이 생성되기 전 null로 초기화가 가능하다.
그러나 null 값을 가진 상태의 배열안의 데이터를 참조하면 Null Pointer Exception가 발생하기 때문에, 초기화를 확실히 하는것이 좋다.


Default  값( 초기값 )

  • int : 0
  • String : null
  • boolean : false
  • double : 0.0

3. 예제로 배열 다루기


1) 초기화

  • 아래와 같이 크기가 10인 배열을 선언하고, 반복문으로 배열에 일일히 값을 넣어 초기화 할 수 있다.
int[] arr = new int[10];

for(int i=0;i<10;i++){
	arr[i] = i+1;
}

2) 인덱스

위의 예제에서 arr[] 배열의 10개의 index에 각각 1부터 10까지 넣어서 초기화 해봤다.
이제 배열을 초기화 했으니, 배열의 각 index의 값을 꺼내보자.
`arr[0]` = 1 , `arr[1]` = 2 . . . `arr[9]` = 10 가 담겼을 것이다.

배열의 데이터를 모두 더하는 예제를 만들어보자.

int sum = 0;

for(int i=0;i<10;i++){
    sum+=arr[i];
}

3) arr.length

배열의 길이는 arr.length로 알수 있다.
위의 예제를 바꿔보자.

int sum = 0;
for(int i=0;i<arr.length;i++){
    sum+=arr[i];
}

(결과는 동일하다.)

4) 향상된 for문

배열의 요소를 하나씩 순회하며 값을 뽑아내는 향상된 for문을 사용할수도 있다.

int sum = 0;
for(int x : arr){
    sum+=x;
}

5) String 형 배열

배열은 동일한 data type의 묶음이다. 따라서 int 형 뿐만 아니라 String, boolean, 심지어 다른 자료구조도
담을 수 있다.

String[] strArr = {"Hello", "World", "!!"};

System.out.println(strArr[0]+strArr[1]+strArr[2]);

출력 : HelloWorld!!

 

4. 배열 복사


방법 1) 똑같이 복사 clone()

int[] arr = {1,2,3};
int[] copyArr = arr.clone();

방법 2) Arrays.copyOf()

Arrays.copyOf(원본 배열, 복사할 길이)

int[] array = {1,2,3,4,5,6,7};
int[] arr = Arrays.copyOf(array, array.length);

방법 3) Arrays.copyOfRange()

Arrays.copyOfRange(원본배열, start, end) : start부터 end바로 앞까지 복사

int[] array = {1,2,3,4,5,6,7};
int arr[] = Arrays.copyOfRange(array,2,5);
//결과 : [3,4,5]

방법 4) System.arraycopy()

System.arraycopy(원본배열, 원본시작인덱스, 타겟배열, 타겟시작인덱스, 복사개수)

int[] array = {1,2,3,4,5,6,7};
int[] arr = new int[array.length];
System.arraycopy(array, 0, arr, 0, arr.length)
//    array에서 / array[0]부터 / arr로 복사/ arr[0]부터 / 7개(arr.length) 

 

'자료구조 & 알고리즘' 카테고리의 다른 글

[Algorithm/Java] 선택 정렬 (selection sort)  (0) 2023.05.08
[Algorithm/Java] 버블정렬 (bubble sort)  (0) 2023.05.08
[Algorithm/Java] BFS(너비 우선 탐색)  (0) 2023.05.08
[Algorithm/Java] DFS(깊이 우선 탐색)  (2) 2023.05.08
[JAVA/자료구조] 컬렉션(Collection) 프레임워크  (0) 2023.02.07
  1. 1. 배열이란?
  2. 인덱스(index)
  3. 배열의 장점
  4. 배열의 단점
  5. 2. 배열 선언 방법
  6. Default  값( 초기값 )
  7. 3. 예제로 배열 다루기
  8. 1) 초기화
  9. 2) 인덱스
  10. 3) arr.length
  11. 4) 향상된 for문
  12. 5) String 형 배열
  13. 4. 배열 복사
  14. 방법 1) 똑같이 복사 clone()
  15. 방법 2) Arrays.copyOf()
  16. 방법 3) Arrays.copyOfRange()
  17. 방법 4) System.arraycopy()
'자료구조 & 알고리즘' 카테고리의 다른 글
  • [Algorithm/Java] 버블정렬 (bubble sort)
  • [Algorithm/Java] BFS(너비 우선 탐색)
  • [Algorithm/Java] DFS(깊이 우선 탐색)
  • [JAVA/자료구조] 컬렉션(Collection) 프레임워크
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (235)
    • Java (25)
    • Spring (29)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (47)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (5)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • cleancode
  • 백준
  • 개발자
  • Redis
  • vue3
  • 제로베이스
  • 백엔드기술면접
  • Linux
  • 백엔드공부
  • 클린코드
  • web
  • 기술면접
  • SpringBoot
  • mybatis
  • 트랜잭션
  • Redisson
  • Spring
  • JPA
  • 자료구조
  • springsecurity
  • Database
  • HTTP
  • MySQL
  • SQL
  • 백엔드스쿨
  • 백엔드
  • Nuxt3
  • TechInterview
  • Java
  • 리눅스

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[Java] 배열(Array)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.