back-end&DB/Java

JAVA Array와 ArrayList

Hoon0211 2023. 5. 17. 12:27
728x90

1. 배열(array)

같은 타입의 데이터들을 하나로 묶어 다루는 것

int [] arr = new int[5];
String [] arr2 = new String[2];

 

 

1.1 배열의 한계
배열 선언시 고정된 크기로 선언
배열의 크기를 바꿀 수 없다.

String[] arr = new String[2];
		arr[0] = "A";
		arr[1] = "B";
		arr[2] = "C";// << 오류 발생 코드
		System.out.println(arr[2]);
        
// Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2
// at ex_01.main(ex_01.java:4)

 

 

2. ArrayList

가장 보편적으로 많이 사용하는 컬렉션 클래스로 객체를 저장

가변리스트, 추가 삭제가 쉽고 길이가 유동적

데이터 타입은 객체 형태로 작성 (Int = Integer...)

 

- ArrayList<데이터타입> 변수명 = new ArrayList<데이터타입>();

import java.util.ArrayList; // << 아래 코드 입력시 자동으로 import 해준다.
--------------------------------------------------------
ArrayList<Integer> arrList = new ArrayList<Integer>();

 

 

2.1 배열과 ArrayList 비교

 

- 크기 확인 방법

배열 > length; (속성)

ArrayList > size(); (메소드)

int [] arr = new int[5];
ArrayList<Integer> arrList = new ArrayList<Integer>();
		
System.out.println("배열의 크기 : " + arr.length); // 배열의 크기 : 5
System.out.println("arrList의 크기 : " + arrList.size()); // arrList의 크기 : 0

 

- 값 입력(추가)

배열의 경우

for (int i = 0; i < arr.length; i++) arr[i] = i+1;

 

ArrayList의 경우

ArrayList > add(추가할 값); (메소드)

arrList.add(1);
arrList.add(2);
arrList.add(3);
arrList.add(4);
arrList.add(5);
System.out.println("값 추가 후 arrList의 크기 : " + arrList.size()); // 값 추가 후 arrList의 크기 : 5

 

* 원하는 위치에 값 추가 > add(인덱스 번호, 추가할 값)

arrList.add(0,6);

 

 

- 값 조회

배열의 경우

for(int i = 0; i < arr.length; i++)
System.out.println("배열 " + i + "번째 : " + arr[i] );

 

ArrayList의 경우

for(int i = 0; i < arrList.size(); i++)
System.out.println("arrList " + i + "번째 : " + arrList.get(i) );

 

 

- 값 삭제

 

배열 : 삭제X

ArrayList > remove(), clear() 메소드 사용

remove(인덱스)

arrList.remove(0);
for(int i = 0; i < arrList.size(); i++)
System.out.println("arrList " + i + "번째 : " + arrList.get(i) );
// 0 번값 삭제후 2 3 4 5 출력

clear()

모든 값을 삭제

arrList.clear();
System.out.println("clear 후 arrList의 크기 : " + arrList.size()); // 0 출력

 

- (정리)배열 vs ArrayList

 

공통점

인덱스를 활용(0부터 시작) 반복문 활용 가능

데이터를 여러 개 담을 수 있음

같은 타입의 데이터만 담을 수 있음

 

차이점

크기 : 배열은 고정, ArrayList는 가변 가능

ArrayList는 메소드를 활용(add, get, remove, clear)

 

3. 실습

 

- 문제1) 팀원의 이름을 입력 받고 ArrayList를 활용하여 출력하세요.

 

이름을 입력하세요 : AAA
이름을 입력하세요 : BBB
이름을 입력하세요 : CCC
이름을 입력하세요 : DDD
알파벳 팀원은 : AAA BBB CCC DDD 입니다.

Scanner scan = new Scanner(System.in);
		ArrayList<String> arrList = new ArrayList<String>();

		for (int i = 0; i < 4; i++) {
			System.out.print("이름을 입력하세요 : ");
			String str = scan.next();
			arrList.add(str);
		}
		
		System.out.print("알파벳 팀원은 : ");
		for (int i = 0; i < arrList.size(); i++)
			System.out.print(arrList.get(i) + " ");
		System.out.println("입니다.");

- 출력문을 foreach문을 사용해서 출력이 가능하다.

System.out.print("알파벳 팀원은 : ");
		arrList.forEach((element) -> {
		      System.out.print(element);
		    });
		System.out.println("입니다.");

4. 노래 리스트 만들기

====== Music paly List ======
[1] 노래추가 [2] 노래조회 [3] 노래삭제 [4] 종료 >> 1
=============================
[1] 원하는 위치에 추가  [2] 마지막 위치에 추가 >> 2
추가 할 노래 입력 >> AAA
추가가 완료 했습니다.
[1] 노래추가 [2] 노래조회 [3] 노래삭제 [4] 종료 >> 2
====== 현재 재생 목록 ======
1. AAA
[1] 노래추가 [2] 노래조회 [3] 노래삭제 [4] 종료 >> 3
=============================
[1] 원하는 위치 삭제  [2] 모든 노래 삭제 >> 2
모든 노래가 삭제 되었습니다.
[1] 노래추가 [2] 노래조회 [3] 노래삭제 [4] 종료 >> 4
프로그램을 종료합니다.

 

public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList<String> musicList = new ArrayList<String>();

		System.out.println("====== Music paly List ======");
		while (true) {

			System.out.print("[1] 노래추가 [2] 노래조회 [3] 노래삭제 [4] 종료 >> ");
			int num = sc.nextInt();
			int index = musicList.size() + 1;
			if (num == 1) {// 노래 추가

				System.out.println("=============================");

				System.out.print("[1] 원하는 위치에 추가  [2] 마지막 위치에 추가 >> ");
				num = sc.nextInt();
				String music;
				
				switch (num) {
				case 1: // 1-1 1번 원하는 위치 추가
					System.out.print("추가 할 위치 입력 >> ");
					index = sc.nextInt(); // 원하는 위치 입력
		
				case 2: // 1-2 마지막 위치에 추가
					System.out.print("추가 할 노래 입력 >> ");
					music = sc.next();
					musicList.add(index - 1, music); // 사용자 입장에서 1번자리는 1로 시작
					System.out.println("추가가 완료 했습니다.");
					break;

				default:
					System.out.println("잘못 입력하셨습니다.");
					break;
				}

			} else if (num == 2) {// 노래조회
				System.out.println("====== 현재 재생 목록 ======");
				if (musicList.size() == 0) { // 재생 목록이 없는 경우 출력문
					System.out.println("재생 목록이 없습니다.");
				} else {
					for (int i = 0; i < musicList.size(); i++) { // 사용자 입장에서는 시작은 1
						System.out.println((i + 1) + ". " + musicList.get(i));
					}
				}

			} else if (num == 3) { // 노래삭제
				System.out.println("=============================");
				System.out.print("[1] 원하는 위치 삭제  [2] 모든 노래 삭제 >> ");
				num = sc.nextInt();

				switch (num) {
				case 1: // 1-1 1번 원하는 위치 삭제
					System.out.print("삭제 할 위치 입력 >> ");
					index = sc.nextInt(); // 원하는 위치 입력
					musicList.remove(index - 1); // 0번 인덱스 1번이라서 -1
					System.out.println("삭제가 되었습니다.");
					break;

				case 2: // 2-2 모든 노래 삭제
					musicList.clear(); // 모든 리스트 삭제
					System.out.println("모든 노래가 삭제 되었습니다.");
					break;

				default:
					System.out.println("잘못 입력하셨습니다.");
					break;
				}

			} else if (num == 4) { // 4. 프로그램 종료
				System.out.println("프로그램을 종료합니다.");
				break; // while문 종료
			} else { // 재입력
				System.out.println("=============================");
				System.out.println("1번 ~ 4번 번호를 입력하세요");

			}
		}
		sc.close();

 

728x90