이 글은 유튜브 '자바의 정석 - 기초편'을 보고 정리한 글입니다.
📂content
1. 배열을 다루기 편리한 메서드(static) 제공
비슷한 것으로 Math, Objects, Collections라는 클래스가 있고 유용한 메서드를 제공한다.
⚝ 배열의 출력 - toString()
static String toString(boolean[] a)
static String toString(byte[] a)
static String toString(char[] a)
static String toString(short[] a)
static String toString(int[] a)
static String toString(long[] a)
static String toString(float[] a)
static String toString(double[] a)
static String toString(Object[] a)
⚝ 배열의 복사 - copyOf(), copyOfRange()
int[] arr = {0,1,2,3,4};
int[] arr2 = Arrays.copyOf(arr, arr.length) //arr2 = [0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 3) //arr3 = [0, 1, 2]
int[] arr4 = Arrays.copyOf(arr, 7) //arr4 = [0, 1, 2, 3, 4, 0, 0]
int[] arr5 = Arrays.copyOfRange(arr, 2, 4) //arr5 = [2, 3] <- 4는 불포함
int[] arr6 = Arrays.copyOfRange(arr, 0, 7) //arr6 = [0, 1, 2, 3, 4, 0, 0]
from~to이면 <= x < 라서 뒤의 값은 안 들어간다.
⚝ 배열 채우기 - fill(), setAll()
int[] arr = new int[5];
Arrays.fill(arr, 9); //arr = [9, 9, 9, 9, 9]
//람다식
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1); //arr = [1, 5, 2, 1, 1]
⚝ 배열의 정렬과 검색 - sort(), binarySearch()
int[] arr = {3, 2, 0, 1, 4};
//배열에서 2가 어디있는지 찾는 것
int idx = Arrays.binarySearch(arr, 2); //idx = -5 <- 잘못된 결과
Arrays.sort(arr); //배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2); //idx = 2 <- 올바른 결과
이진탐색은 정렬된 배열에만 가능하다.
알아두면 좋다! - 순차 검색과 이진(이분) 검색
- 순차검색 : 하나씩 앞에서부터 보면서 순서대로 찾는 것. (for문)
- 이진 검색 : 반씩 잘라가면서 비교한다.
⚝ 다차원 배열의 출력 - deepToString()
int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{11, 12}, {21, 22}};
System.out.println(Arrays.toString(arr)); //[0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); //[[11, 12], [21, 22]]
⚝ 다차원 배열의 비교 - deepEquals()
String[][] str2D = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
System.out.println(Arrays.equals(str2D, str2D2)); //false
System.out.println(Arrays.deepEquals(str2D, str2D2)); //true
⚝ 배열을 List로 변환 - asList(Object... a)
List list = Arrays.asList(new Integer[]{1, 2, 3, 4, 5}); //list = [1, 2, 3, 4, 5]
List list = Arrays.asList(1, 2, 3, 4, 5);
list.add(6); //UnsupportedOperationException 예외발생
List list = new ArrayList(Arrays.asList(1, 2, 3, 4, 5));
- Object...는 가변 매개변수를 의미한다. 따라서 매개변수 여러개를 넣어도 된다는 것이다. 가변은 갯수가 정해져 있지 않다는 것이다. 아니면 배열을 넣으면 된다.
- List의 특징은 읽기 전용이다. 따라서 add() 메소드를 사용하면 예외가 뜬다. 그렇기 때문에 ArrayList로 만들어주어야 한다.
⚝ 람다와 스트림(14장) 관련 - parallelXXX(), spliterator(), stream()
⍟실습
더보기
package etc;
import java.util.Arrays;
public class Ex11_6 {
public static void main(String[] args) {
int[] arr = {0,1,2,3,4};
int[][] arr2D = {{11,12,13}, {21,22,23}};
System.out.println("arr="+ Arrays.toString(arr)); //arr=[0, 1, 2, 3, 4]
System.out.println("arr2D="+Arrays.deepToString(arr2D));//arr2D=[[11, 12, 13], [21, 22, 23]]
int[] arr2 = Arrays.copyOf(arr, arr.length);
int[] arr3 = Arrays.copyOf(arr, 3);
int[] arr4 = Arrays.copyOf(arr, 7);
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);
System.out.println("arr2="+Arrays.toString(arr2)); //arr2=[0, 1, 2, 3, 4]
System.out.println("arr3="+Arrays.toString(arr3)); //arr3=[0, 1, 2]
System.out.println("arr4="+Arrays.toString(arr4)); //arr4=[0, 1, 2, 3, 4, 0, 0]
System.out.println("arr5="+Arrays.toString(arr5)); //arr5=[2, 3]
System.out.println("arr6="+Arrays.toString(arr6)); //arr6=[0, 1, 2, 3, 4, 0, 0]
int[] arr7 = new int[5];
Arrays.fill(arr7, 9); // arr=[9,9,9,9,9]
System.out.println("arr7="+Arrays.toString(arr7)); //arr7=[9, 9, 9, 9, 9]
Arrays.setAll(arr7, i -> (int)(Math.random()*6)+1);
System.out.println("arr7="+Arrays.toString(arr7)); //arr7=[5, 1, 6, 2, 4]
for(int i : arr7) { //향상된 for문
//for(int i = 0; i<arr7.length; i++)
char[] graph = new char[i];
Arrays.fill(graph, '*');
System.out.println(new String(graph)+i);
/**
* *****5
* *1
* ******6
* **2
* ****4
*/
}
String[][] str2D = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
String[][] str2D2 = new String[][]{{"aaa","bbb"},{"AAA","BBB"}};
System.out.println(Arrays.equals(str2D, str2D2)); // false
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true
char[] chArr = { 'A', 'D', 'C', 'B', 'E' };
System.out.println("chArr="+Arrays.toString(chArr)); //chArr=[A, D, C, B, E]
System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B')); //index of B =-2
System.out.println("= After sorting =");
Arrays.sort(chArr);
System.out.println("chArr="+Arrays.toString(chArr)); //chArr=[A, B, C, D, E]
System.out.println("index of B ="+Arrays.binarySearch(chArr, 'B')); //index of B =1
}
}
출처
'🎥Back > 자바의 정석' 카테고리의 다른 글
[JAVA의 정석]HashSet (0) | 2024.01.17 |
---|---|
[JAVA의 정석]Comparator와 Comparable (0) | 2024.01.17 |
[JAVA의 정석]Iterator, Enumeration, Map과 Iterator (0) | 2024.01.16 |
[JAVA의 정석]Stack과 Queue의 활용 (0) | 2024.01.16 |
[JAVA의 정석]Stack과 Queue (0) | 2024.01.16 |