일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- implement
- Tree
- dynamic programming
- simulation
- Binary Search
- Class
- Stack
- 파이썬
- greedy
- bit manipulation
- 구현
- Counting
- array
- database
- Method
- Math
- geometry
- Binary Tree
- 코딩테스트
- 자바
- hash table
- Number Theory
- java
- 코테
- sorting
- string
- Data Structure
- two pointers
- SQL
- Matrix
- Today
- Total
코린이의 소소한 공부노트
Arrays 클래스 본문
[Arrays 클래스]
1. 배열을 다루기 편리한 (static)메서드를 제공하는 유틸 클래스다.
2. java.util 패키지에 있다.
[Arrays 클래스의 메서드]
1. 배열의 출력: toString()
static String toString(X[] a)
// 여러가지 타입이 들어갈 수 있게 오버로딩 되어 있음
// X에 들어가는 것
// 기본형 8가지: boolean, char, byte, short, int, long, double, float
// Object
int[] arr = {0,1,2,3,4};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
2. 배열의 복사: copyOf(), copyOfRange()
int[] arr = {0,1,2,3,4};
// copyOf(): 지정한 배열에서 해당 길이만큼 복사한 새 배열을 만든다.
// 지정한 길이가 지정한 배열의 길이보다 길면 0으로 채운다.
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}
// copyOfRange(): 지정한 배열에서 from <= index < to만큼 복사한 새 배열을 만든다.
// 지정한 범위가 지정한 배열의 범위를 벗어나면 0으로 채운다.
int[] arr5 = Arrays.copyOfRange(arr, 2, 4); // arr5 = {2,3}
int[] arr6 = Arrays.copyOfRange(arr, 0, 7); // arr6 = {0,1,2,3,4,0,0}
3. 배열 채우기: fill(), seetAll()
int[] arr = new int[5];
// fill(): 모두 같은 값으로 채운다.
Arrays.fill(arr, 9); // arr = {9,9,9,9,9}
// setAll(): 지정한 람다식으로 계산한 값을 채운다.
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1); // arr = {1,5,2,1,1}
4. 배열의 정렬과 검색: sort(), binarySearch()
int[] arr = {3,2,0,1,4};
// 현재 2는 1번째에 위치한 상태
// binarySearch(): 지정한 배열에서 지정된 값을 이진 탐색해 그 위치를 반환한다.
// 정렬된 배열에 써야 제대로 된 결과가 나온다.
int idx = Arrays.binarySearch(arr, 2); // idx = -5, 잘못된 결과
// sort(): 오름차순으로 배열의 값을 정렬해준다. 반환 타입은 void
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
int idx = Arrays.binarySearch(arr, 2); // idx = 2, 올바른 결과
5. 다차원 배열의 출력: deepToString()
int[] arr = {0,1,2,3,4};
int[][] arr2 = {{11,12},{13,14}};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2)); // [[11, 12], [13, 14]]
6. 다차원 배열의 비교: deepEquals()
int[][] arr = {{11,12},{13,14}};
int[][] arr2 = {{11,12},{13,14}};
System.out.println(Arrays.equals(arr, arr2)); // false, 참조변수의 값을 비교한 것
System.out.println(Arrays.deepEquals(arr, arr2)); // true, 배열의 내용을 비교한 것
7. 배열을 List로 변환: asList()
// 매개변수를 List로 변환한다.
List list = Arrays.asList(new Integer[]{1,2,3,4,5}); // list = {1,2,3,4,5}
// 가변 매개변수라 여러개 넣어도 상관 없다.
List list2 = Arrays.asList(1,2,3,4,5); // list2 = {1,2,3,4,5}
// List는 읽기 전용이기 때문에 변경 할 수 없다.
list2.add(6); // UnsupportedOperationException 발생
List list3 = new ArrayList(Arrays.asList(1,2,3,4,5)); // 변경이 가능하게 ArrayList로 선언한 형태
8. 람다와 스트림 관련: parallelOOO(), spliterator(), stream()
[쿠키글1] 순차 검색과 이진 검색
1. 순차 검색
- 맨 앞부터 차례대로 탐색하며 원하는 값을 찾는 방식
- 배열의 요소가 10개라면 평균 (1+2+3+4+5+6+7+8+9+10) / 5 = 5.5회 만에 원하는 값을 찾을 수 있다.
- 운이 나쁘면 원하는 값을 찾는 데 아주 오래 걸릴 수 있다.
- 데이터 정렬이 불필요하다.
2. 이진 검색
- 정렬된 데이터에서 반씩 잘라가며 원하는 값을 찾는 방식
- 배열의 요소가 10개라면 평균 3~43~4회 만에 원하는 값을 찾을 수 있다.
- 검색 시간이 짧다.
- 데이터 정렬이 반드시 선행돼야 한다.
[쿠키글2] 향상된 for문
어떤 배열에서 요소 1개씩 쭉 출력하는 코드를 쓰면, 보통 이렇게 많이 쓴다.
int[] arr = {1,2,3,4,5};
for(int i=0 ; i<arr.length ; i++)
System.out.println(arr[i]);
이를 직관적으로 바꿔서 표현한 것이 향상된 for문이다.
int[] arr = {1,2,3,4,5};
for(int x : arr) // arr에서 요소를 하나 꺼내 i에 저장
System.out.println(x);
// 위의 for문을 기본 for문으로 바꿔보면 다음과 같다.
for(int i=0 ; i<arr.length ; i++){
int x = arr[i];
System.out.println(x);
}
'Java' 카테고리의 다른 글
HashSet 클래스 (0) | 2022.11.07 |
---|---|
Comparator, Comparable 인터페이스 (0) | 2022.11.05 |
Iterator, ListIterator, Enumeration 인터페이스 (0) | 2022.11.03 |
스택 클래스와 큐 인터페이스 (0) | 2022.11.02 |
LinkedList 클래스 (0) | 2022.11.02 |