-
[ch11 컬렉션 프레임웍] Arrays의 중요 메서드 (복사, 정렬, 비교..)프로그래밍 언어/JAVA 2022. 8. 3. 13:24
📑 배열의 복사 - copyOf(), copyOfRange()
Arrays클래스에는 배열을 다루는데 유용한 메서드가 정의되어 있다. copyOf()는 배열 전체를, copyOfRange()는 배열의 일부를 복사해서 새로운 배열을 만들어 반환한다.
int [] arr = {0, 1, 2, 3, 4};
int [] arr2 = Arrays.copyOf(arr, 3); // arr2 = [0,1,2]
int [] arr3 = Arrays.copyOfRange(arr,2,4); // arr3 = [2,3]
int [] arr4 = Arrays.copyOfRange(arr,0,7); // arr4 = [0,1,2,3,4,0,0]📑 배열의 정렬과 검색 - sort(), binarySearch()
sort()는 배열을 정렬할 때, 그리고 배열에 저장된 요소를 검색할 때는 binarySearch()를 사용한다. binarySearch()는 배열에서 지정된 값이 저장된 위치(index)를 찾아서 반환하는데, 반드시 배열이 정렬된 상태이어야 올바를 결과를 얻는다.
배열의 첫 번째 요소부터 순서대로 하나씩 검색하는 것을 '순차 검색( linear search)'이라고 하는데, 이 검색 방법은 배열이 정렬되어 있을 필요는 없지만 배열의 요소를 하나씩 비교하기 때문에 시간이 많이 걸린다, 반면에 이진 검색(binary search)은 배열의 검색할 범위를 반복적으로 절반씩 줄여가면서 검색하기 때문에 검색 속도가 상당히 빠르다. 단, 배열이 정렬되어 있는 경우에만 사용 가능하다.
int [ ] arr = {3,2,0,1,4,};
int idx = Arrays.binarySearch(arr,2); // idx=-5 잘못된 결과
따라서
Arryas.sort(arr); //배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr)); // [0,1,2,3,4]
int idx = Arrays.binarySearch(arr,2); //idx =2 올바른 결과📑 문자열의 비교와 출력 - equals(), toString()
toString()으로 배열의 모든 요소를 문자열로 편하게 출력할 수 있다. 이미 많이 사용해서 익숙할 것이다. toString()은 일차원 배열에만 사용할 수 있으므로, 다차원 배열에서는 deepToString()을 사용해야 한다.
equals()는 두 배열에 저장된 모든 요소를 비교해서 같이면 true, 다르면 false를 반환한다. equlas()도 일차원 배열에만 사용 가능하므로, 다차원 배열의 비교에는 deepEqulas()를 사용해야한다.
📑 문자열 비교와 출력 - asList(Object ... a)
asList()는 배열을 List에 담아서 반환한다. 매개변수 타입이 가변인수라서 배열 생성없이 저장할 요소들만 나열하는 것도 가능하다. 즉) 배열 초기화할 때 사용하면 좋은 함수이다. 한 가지 주의할 점은 asList()가 반환한 List의 크기를 변경할 수 없다. 즉) 추가 또는 삭제가 불가능하다. 만일 크기를 변경할 수 있는 List가 필요하다면 다음과 같이 하면 된다.
List list = Arrays.asList(1,2,3,5,6);
List list2 = Arrays.asList(new Integer[] {1,2,3,4,5});
System.out.println(list);
List list = new ArrayList(Array.asList(1,2,3,4,5));package ch_11; import java.util.Arrays; public class Ex7_ArraysEx { public static void main(String[] args) { int[] arr = new int[5]; Arrays.setAll(arr, (i)->(int)(Math.random()*5)+1); System.out.println(Arrays.toString(arr)); /* * for(int i=0; i<arr.length;i++) { for(int j=0;j<arr[i];j++){ * System.out.print('*'); } System.out.println(arr[i]); } */ for(int i : arr) { char[] graph = new char[i]; Arrays.fill(graph, '*'); System.out.println(new String(graph)+i); } for(int i=0; i<arr.length;i++) { char[] graph = new char[arr[i]]; Arrays.fill(graph, '*'); System.out.println(new String(graph)+arr[i]); } } }
반응형'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[ch9 JAVA] StringBuffer 클래스의 생성자와 메서드 알아보기 (0) 2022.08.04 [ch9 JAVA] String 클래스 생성자 & String, new String() 차이 (0) 2022.08.04 [ch11 컬렉션 프레임웍] Iterator & Enumeration 와 Map (0) 2022.08.03 [ch11 컬렉션 프레임웍] Stack과 Queue의 메서드 (add vs offer) (0) 2022.08.03 [ch11 컬렉션 프레임웍] ArrayList, LinkedList 메서드& 추가와 삭제 (0) 2022.08.02