5월 3일 내용정리
1.Arrays.sort(): 기본타입, String형은 자동으로 오름차순으로 정렬해줌
사용자가 정의한 클래스타입을 쓰는 경우 클래스가 Comparable 인터페이스를 구현해야 정렬할수 있음
2.배열검색:배열항목들 중에서 찾으려는 값이 있는 위치인덱스 구하는방법
검색하기전에 반드시 오름차순정렬Arrays.sort()한 후 검색이 가능하다.
Arrays.binarySearch(항목들이 들어있는 배열,찾을값(항목))를 활용
package study_0503;
import java.util.Arrays;
import java.util.Collection;
public class ArraySort {
public static void main(String[] args) {
//숫자정렬
int [] iArray = {85,95,23,76,10};
Arrays.sort(iArray); //오름차순
for(int i=0;i<iArray.length;i++) {
System.out.print(iArray[i]+ ",");
}
//문자열 정렬
String[]name= {"홍길동","김바다","이하늘","박자바"};
Arrays.sort(name);
for(int i=0;i<name.length;i++) {
System.out.print(name[i]+ ",");
}
//클래스타입 정렬
Member m1 =new Member("김자바");
Member m2 =new Member("이자바");
Member m3 =new Member("강자바");
Member m4 =new Member("최자바");
Member[] member4= {m1,m2,m3,m4};
Arrays.sort(member4);
for(int i=0;i<member4.length;i++) {
System.out.println(member4[i]);
}
int index =Arrays.binarySearch(iArray,23);
System.out.println(index);
int index01 =Arrays.binarySearch(name,"이하늘");
System.out.println(index01);
int index02 =Arrays.binarySearch(member4,m1);
System.out.println(index02);
}
}
3.Arrays.sort() 사용전 Comparable 사용
Comparable은 인터페이스를 상속받아서 사용 한다.
Comparable<지네릭스, 타입을써줌>
Comparable 인터페이스에 있던 추상클래스 compareTo를 재정의 해줘야 한다.
내값 compareTo (비교값) 값이 같으면 '0',
내값이 사전순으로 앞에 있으면 -1,
내값이 사전순으로 뒤에 있으면 1,
package study_0503;
public class Member implements Comparable<Member> {
String name;
public Member(String name){
this.name=name;
}
@Override
public int compareTo(Member o) {
return name.compareTo (o.name);
}
}
4.boolean equals는 재정의가 안되어 있어서 "==" 와 동일
주소가 같은지 물어봄
5.배열복사
copyOf(원본배열, 복사할 길이-1)
copyOfRange(원본배열, 시작인덱스, 끝인덱스)
System.arraycopy(원본배열, 원본의 시작인덱스, 복사할 배열, 복사할 시작인덱스,복사의개수)
주소값만 복사해가는것을 얕은복사라고 한다.
내용까지 싹다 복사해서 새로 주소를 파서 알려주는걸 깊은복사 라고 한다.
6.1차 배열의 항목을 비교-equals():1차 항목의 값만 비교
2차 배열의 항목을 비교deepEquals():중첩된 배열의 항목까지 비교
package study_0503;
import java.util.Arrays;
public class ArraysTest {
public static void main(String[] args) {
char[]arr1= {'j','a','v','a'};
//copyOf(원본배열, 복사할 길이-1) 이용
char[]arr2=Arrays.copyOf(arr1,3);
char[]arr3=Arrays.copyOf(arr1,arr1.length);
//얕은복사->주소값만 복사
int[][] originArr= {{1,2},{3,4}};
int[][] cloneArr=Arrays.copyOf(originArr,originArr.length);
System.out.println(Arrays.equals(originArr, cloneArr)); //1차배열 항목값비교
System.out.println(Arrays.deepEquals(originArr, cloneArr));//2차배열 항목값비교
}
}