[43] Java[배열,예외처리] - Arrays 클래스 & 메소드, ArrayList 클래스 & 메소드

minjeong·2024년 4월 22일
1
post-thumbnail

배열

  • 처음 선언한 배열의 크기는 변경할 수 없다, 크기를 미리 지정해야한다. == 정적할당

배열 출력 : Arrays 클래스의 toString 메소드

import java.util.Arrays;


int[] arr = { 1, 2, 3, 4, 5 }; // 배열 초기화

// copyof :특정 길이 만큼 복사한 새 배열을 반환
int[] copyOfArr = Arrays.copyOf(arr, 5); 
System.out.println(Arrays.toString(copyOfArr)); //[1, 2, 3, 4, 5]

-> 배열의 값을 문자열로 변환하여 출력할 수 있다.

예시

// 배열의 선언
int[] arr1 = new int[10]; // 정수 10개를 저장하는 배열(10이 10개가 아님)
int[] arr2 = { 1, 2, 3, 4, 5 }; // 대괄호 : 개수, 중괄호 : 배열안의 값 // 초기값을 가지는 배열

Array 클래스의 여러 메소드의 종류

  1. copyOf(arr,copyArrayLength) : 특정 길이만큼 복사한 새 배열을 반환
  2. copyOfRange(arr,sIdx,eIdx) : 시작 인덱스부터 종료 인덱스 전까지의 부분을 지정하여 복사한 새 배열을 반환
  3. fill(arr,n) : 배열의 모든 요소를 주어진 값으로 채움
    ex) Arrays.fill(배열이름, 시작인덱스, 종료인덱스, 채워질 값)
  4. sort(arr) : 배열을 오름차순으로 정렬 (원본 배열도 변경된다)
  5. equals(arr1,arr2) : 두 배열이 같은지 여부 확인(boolean)
  6. deepEquals(arr1,arr2) : 단일 또는 다차원 배열인 두 배열이 같은지 비교(boolean)
  7. binarySearch(arr,idx) : 특정값의 인덱스값을 이진탐색 알고리즘을 사용해서 찾기. 이때 해당위치가 반환됌 미리 정렬이 되어 있어야 이진탐색 알고리즘을 사용할 수 있다.

예시

import java.util.Arrays;

public class ArraysMethod {

	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 5 }; // 배열 초기화

		// 1. copyof :특정 길이 만큼 복사한 새 배열을 반환
		int[] copyOfArr = Arrays.copyOf(arr, 5);
		System.out.println(Arrays.toString(copyOfArr));

		// 2. copyOfRange : 시작 인덱스부터 종료 인덱스 전까지의 부분을 복사한 새 배열을 반환
		int[] copyOfRangeArr = Arrays.copyOfRange(arr, 1, 3); // [2,3]
		System.out.println(Arrays.toString(copyOfRangeArr)); // [2, 3]

		// 3.  fill : 배열의 모든 요소를 주어진 값으로 채움
		Arrays.fill(arr, 10); // 원본값이 달라짐
		System.out.println(Arrays.toString(arr)); // [10, 10, 10, 10, 10]

		// fill로 부분 요소 채움
		int[] arr2 = new int[10]; //배열의 개수를 10개로 한정
		arr2[0] = 1;
		arr2[1] = 2;
		arr2[2] = 3;
		Arrays.fill(arr2, 3, arr2.length, 100); // (해당배열을, 3부터(시작),~까지, 이값으로 채운다)
		System.out.println(Arrays.toString(arr2)); // [1, 2, 3, 100, 100, 100, 100, 100, 100, 100]

		//  sort : 배열을 오름차순으로 정렬
		int[] arr3 = { 3, 7, 2, 8, 10 };
		Arrays.sort(arr3);
		System.out.println(Arrays.toString(arr3)); // [2, 3, 7, 8, 10]

		// equals : 두 배열이 같은지 여부 확인
		int[] arr4 = { 1, 2, 3, 4, 5 };
		System.out.println(Arrays.equals(arr3, arr4)); // false

		// deepEquals : 다차원 배열 비교
		int[][] arrs1 = { { 1, 2 }, { 5, 6 } };
		int[][] arrs2 = { { 5, 2 }, { 8, 9 } };

		System.out.println(Arrays.deepEquals(arrs1, arrs2)); // false

		// binarySearch : 특정값의 인덱스값 찾기, 항상 정렬이 되어 있어야함
		int index = Arrays.binarySearch(arr3, 10); // (이 배열에, 이 값이 어디있는지? 찾아주는 메소)
		System.out.println(index); // 4

	}
}

ArrayList 클래스

  • 표준 배열보다 조금 느릴 수 있지만, 배열에서 많은 조작이 필요할때 유용하게 사용되는 클래스
  • 크기를 미리 정하지 않아도 되는 배열 == 동적할당

ArrayList 메소드

  1. add(element) : ArrayList 맨 뒤에 element 추가
  2. add(index,element) : index 위치에 element 삽입
  3. addAll(ArrayList) : ArrayList 뒤에 ArrayList 추가, 여러 요소 일괄적으로 추가
  4. size() : ArrayList의 길이 리턴
  5. get(index) : index에 해당하는 요소 리턴
  6. indexOf(params) : params와 같은 첫 번째 요소의 index리턴, 없으면 -1리턴
  7. contains(params) : ArrayList가 params를 포함하고 있는지 여부(boolean)
  8. remove(index) : index의 요소 삭제
  9. isEmpty() : 배열이 비어있는지 확인(boolean)
  10. set(index,element) : 인덱스에 위치한 값을 교체
  11. clear() : 모든 요소 삭제

예제(1)

import java.util.ArrayList;

public class ArraysList {

	public static void main(String[] args) {
		// 동적 배열
		ArrayList<String> list = new ArrayList<>();

		// add : 요소 추가
		list.add("Google");
		list.add("Samsung");
		list.add(1, "Amazon");

		System.out.println(list); // [Google, Amazon, Samsung]

		// addAll : 여러 요소 일괄적으로 추가
		ArrayList<String> list2 = new ArrayList<>();
		list2.add("Apple");
		list2.add("Toss");
		list.addAll(list2);
		System.out.println(list); // [Google, Amazon, Samsung, Apple, Toss]

		// size : 크기확인
		System.out.println(list.size()); // 5

		// contains(params) : ArrayList가 params를 포함하고 있는지 여부
		System.out.println(list.contains("Hyundai")); // false

		// get : 특정 요소에 접근
		System.out.println(list.get(2)); // Samsung

		// set(index,element) :인덱스에 위치한 값을 교체
		list.set(2, "Hyundai");
		System.out.println(list); // [Google, Amazon, Hyundai, Apple, Toss]

		// indexOf : 요소의 인덱스값 찾기
		System.out.println(list.indexOf("Samsung"));// 있으면 index값, 없으면 -1 //-1

		// remove : 요소 삭제
		list.remove("Apple");
		System.out.println(list); // [Google, Amazon, Hyundai, Toss]

		// isEmpty : ArrayList가비어있는지 확인
		System.out.println(list.isEmpty()); // false

	}

}

예제(2)

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayListPrac {

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();

		Scanner scan = new Scanner(System.in);

		while (true) {
			System.out.println("문자를 입력해주세요. : ");
			String text = scan.nextLine();

			if ("exit".equals(text)) {
				break;
			}
			list.add(text);
		}
		for (String result : list) {
			System.out.println("끝났습니다\n" + result);
		}
		scan.close();

	}

}

예외처리

  • 컴파일 오류와 다르다!
  • 컴파일 오류는 문법에 맞지 않게 작성된 코드가 있을때 발생하고, 컴파일 할 때 발견되기 때문에 코드가 실행조차 되지 않는다.

예외가 발생하는 경우

  • 크게 네가지 정도만 설명하면 다음과 같다.
  1. ArithmeticException : 숫자를 0으로 나누는 경우
  2. ArrayIndexOutOfBoundsException : 배열의 인덱스 범위를 벗어나는 경우
  3. InputMismatchException : 정수를 입력받도록 작성한 코드에 문자열을 입력한 경우
    • import java.util.InputMismatchException; 가 필요하다.
  4. NullPointerException : 참조 변수가 null인 상태에서 필드나 메소드에 접근한 경우

어느 언어든 중요한 개념인 배열과 예외처리에 대해 공부했다.
예제를 여러번 따라하면서 적응되도록 해봐야겠다.!

profile
중요한 건 꺾여도 다시 일어서는 마음

0개의 댓글