JAVA Array와 ArrayList
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();