221024 Array클래스
java.util.Arrays클래스
->배열 관련 작업을 쉽게 할 수 있도록 도와주는 클래스
->배열에서 중요한 것
배열의 순회(순서대로 접근)
정렬
검색
복제-오류가 나도 원본이 있으니 괜찮다. 복제하는 습관 들이기(copyOf(,))
필터링
연산
1)sort
->데이터를 순서대로 나열하는 것
->오름차순(ascending-작은 것에서 큰 것 순으로 정렬하는 것으로 기본)과
내림차순(descending-큰 것에서 작은 순으로 정렬하는 것) 정렬이 존재합니다.
=>정렬을 구현하는 방법
알고리즘을 직접 적용해서 정렬-코딩 테스트에서 퀵 정렬은 필수입니다.(되도록이면 설명까지 할 수 있어야 합니다)
API에서 제공하는 메서드를 이용해서 정렬(각 요소가 크기 비교가 가능하도록 해주어야 합니다.)
compareTo
양수면 앞이 크고, 같으면 0, 음수면 앞에가 작음.
sort를 쓰려면 크기비교가 가능한지를 확인해야 함.
compareTo가 된다면 sort가 가능
2)Main클래스의 main메서드에서 사용
package java_1024;
import java.util.Arrays;
public class ArrayTask {
public static void main(String[] args) {
//문자열 배열 생성
String[] ar = {"카리나", "아이린", "윈터", "조이", "슬기"};
//배열을 순회
for(String singer : ar) {
System.out.println(singer);
}
//문자열의 크기 비교 하는 메서드: compareTo, compareToIgnorecase-대소문자 구분 안함
System.out.println(ar[1].compareTo(ar[0]));
System.out.println(ar[0].compareToIgnoreCase("Jack"));
//선택 정렬
//첫번째 부터 n-1번째 데이터 까지
//배열의 복제
String[] copyAr=Arrays.copyOf(ar, ar.length);
System.out.println(Arrays.toString(copyAr));
for(int i=0;i<copyAr.length;i++) {
//자신의 뒤에 있는 모든 데이터와 비교해서
for(int j=i+1;j<copyAr.length;j++) {
//뒤에 있는 데이터가 더 크다면(작다면) 교환
if(copyAr[i].compareTo(copyAr[j])<0) {
String temp=copyAr[i];
copyAr[i]=copyAr[j];
copyAr[j]=temp;
}
}
}
System.out.println(Arrays.toString(copyAr));
//그러나 이 방법은 성능이 떨어지기 때문에 실무에서는 사용하지 않음
//정렬을 설명하기 위해, 반복문 연습하기 위해 하는 것.
}
}
카리나
아이린
윈터
조이
슬기
-2352
52746
[카리나, 아이린, 윈터, 조이, 슬기]
[카리나, 조이, 윈터, 아이린, 슬기]
문자열의 크기 비교하는 메서드
compareTo()
compareToIgnorecase()-대소문자를 구분하지 않음.
실행하면 양수, 0, 음수가 나온다. 양수면 앞이 크고, 0이면 같고, 음수면 뒤가 크다.
때문에 for문에서 작다면 교환하는 것.
배열의 복제-copyOf()
원본을 남겨 두어야 나중에 하다가 오류가 발생해도 돌아갈 수 있음.
tip)실사용
Client----Server(Application server-----data server)
request----->
<------response
꼭 data서버에서 모든 걸 해결하진 않는다. application서버에서 가져와 처리할수도 있고, client서버에서 처리할 수도 있다.
client서버에서 처리하면 코드보안이 취약해지긴 하지만, 개인의료데이터 등 서버로 보내지 않고 바로 처리해야 하는 경우도 있다.
tip)
무언가를 입력받을 때는 문자로! int로 받으면 에러가 날 수 있음
문자열에는 공백도 있으니, 좌우 공백을 지워줄 것.
코드를 만들면서, 하나하나 다 채우는게 아니라 껍데기를 만들고 하나씩 하나씩 채워나가기