copyOfRange
자바가 제공하는 Arrays 클래스는 static한 필드를 갖기 때문에, 메소드를 부를때 객체를 생성하지 않고 사용 할 수 있다.
char[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 1,3);
copyFrom의 배열의 index번호 1~2번까지 출력하는 코드
sort
sort역시 static 필드의 메소드이다. 반환값은 없고 오름차순으로 배열을 정렬한다.
binarySearch 메소드
binarySearch는 key값을 찾아주는 index를 반환한다.
binarySearch 메소드를 사용하기 위해서는 정렬이 먼저 우선시 되어야 한다.
클래스 배열
public class Array172 {
public static void main(String[] args) {
}
}
class Item{
private String name;
private int price;
public Item(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
객체를 정렬하고 싶으면 기준을 정해야 한다.
Comparable는 어떤 Item이 큰지, 작은지 기준을 정하는 interface이다.
위와 같이 items를 정렬을 하고 싶어서 Arrays.sort(); 를 이용했지만
오류가 발생했다. 그 이유는 items를 어떤 기준으로 정렬할 것인지 설정을 하지 않았기 때문이다.
-item 클래스에서 Comparable을 구현하고,
-interface Comparable에 있는 compareTo 메소드를 오버라이딩 한다.
정렬 방법을 정의하는 클래스 만들기
이를 통해 외부에서 정렬하는 방법을 정의하고, 적용할 수 있다.
람다인터페이스
메소드가 하나만 있는 인터페이스를 람다인터페이스라고 한다.
Arrays.sort(items, new ItemSorter());
위의 코드 대신 아래와 같이 변경하자.
Arrays.sort(items, new Comparator(){
});
Array.sort(items, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Item item1 = (Item) o1;
Item item2 = (Item) o2;
return item1.getName().compareTo(Item2.getName());
}
});
를
Array.sort(items, (Object o1, Object o2) -> {
Item item1 = (Item)o1;
Item item2 = (Item)o2;
return item1.getName().compareTo(item2.getName());
}
};
추가적으로 type을 입력하지 않아도 java내에서 처리해준다고 한다.
한번 더 추가적으로... return도 생략 가능하다.
명령행 아규먼트(Command-Line Arguments)
제한없는 아규먼트
public static int(int ... args)
int ... 은 제한없는 제한자로 args배열에 들어갈 수 있다.