[Java] Arrays

Jeini·2022년 12월 8일
0

☕️  Java

목록 보기
36/59
post-thumbnail

💡Arrays


✔️ 배열을 다루기 편리한 메서드(static) 제공

📎 배열의 출력

✔️ toString()

static String toStirng(...)

📎 배열의 복사

  • 새로운 배열을 생성해서 반환한다.
    ✔️ copyOf()
    ✔️ copyOfRange()
int[] arr = {0, 1, 2, 3, 4};

int[] arr2 = Arrays.copyOf(arr, arr.length); // [0,1,2,3,4]
int[] arr3 = Arrays.copyOf(arr, 3); // [0,1,2]
int[] arr4 = Arrays.copyOf(arr, 7); // [0,1,2,3,4,0,0]

int[] arr5 = Arrays.copyOfRange(arr, 2, 4); // [2,3]
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); // [0,1,2,3,4,0,0]

📎 배열 채우기

✔️ 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};

int idx = Arrays.binarySearch(arr, 2); // idx = -5 잘못된 결과

Arrays.sort(arr); // 정렬
System.out.pritnln(Arrays.toString(arr)); // [0,1,2,3,4]

int idx = Arrays.binarySearh(arr, 2); // idx = 2

⭐️ 순차 검색과 이진 검색


만약에 10을 찾는다고 생각해보자.

  • 순차검색은 앞에서 차례대로 검색해서 10을 찾아낸다.
    : 10이 사진처럼 뒤에 있으면 10을 찾는 시간은 평균 5.5회가 걸린다.

  • 이진검색은 두 번 나누어서 찾는다.
    : 10을 찾는다고 하면 반을 나눈다. 그러면 5에서 자르게 되고 5 미만은 10이 없으니까 아예 그 범위는 찾지 않게 된다. 그리고 5 ~ 10에서의 반으로 또 8에서 자르게 되는데 8 미만의 범위에도 10이 없으니 찾지않는다. 8 이상의 범위에서 10이 있기 때문에 10을 바로 찾게 된다.
    : 10을 찾는 시간은 평균 3 ~ 4회가 걸린다.
    : 정렬을 해야지 찾을 수 있으므로, 정렬의 속도를 높이는 것이 중요하다.

📎 다차원 배열의 출력

✔️ 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(Arryas.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(Arryas.deepEquals(str2D, str2D2)); // true

📎 배열을 List로 변환

✔️ asList(Object ... a)

  • 파라미터안의 ... 은 가변 매개변수로 갯수가 정해져있지 않다.
  • 파라미터안에는 배열을 의미한다.
Integer[] arr = new Integer[]{1, 2, 3, 4, 5};

// list = [1, 2, 3, 4, 5]
List list = Arrays.asList(arr);

// List는 읽기전용이기 때문에 지원하지않는 기능이라는 예외가 발생한다.
list.add(6); // UnsupportedOperationException 예외발생

// 새로운 ArrayList로 넣어준다.
List list = new ArrayList(Arrays.asList(arr));

📎 람다와 스트림 관련

✔️ paralleIXXX()
✔️ spliterator()
✔️ stream()


References
: https://cafe.naver.com/javachobostudy

profile
Fill in my own colorful colors🎨

0개의 댓글