이 노트는 "윤성우의 열혈 java 프로그래밍" 책을 공부하면서
내가 이해한대로 다시 정리하면서 작성되었다.
StringTokenizer
클래스는 구분자를 기준으로 문자열을 나눠 토큰을 만든다. 구분자는 토큰으로 구분되지 않고 버려진다. 구분자도 토큰으로 반환하고 싶다면 3번째 인자로 true
를 준다.
StringTokenizer st = new StringTokenizer("PM:08:45",":");
example
StringTokenizer st = new StringTokenizer("12 + 36 - 8 / 2 = 44","+-/= ");
구분자는 둘 이상을 둘 수 있다.
공백 문자도 포함할 수 있다.
hasMoreTokens()
반환할 토큰이 남아 있는가?
nextToken()
다음 토큰을 반환한다. 반환할 토큰이 없는 상태에서 이 메소드가 호출되면 예외가 발생한다.
배열 조작에 도움을 주는 메소들을 모은 클래스로, 배열의 복사, 비교, 정렬 및 탐색과 관련된 코드를 비교적 쉽게 작성할 수 있다.
copyOf()
public static int[] copyOf(int[] original, int newLength)
배열을 복사하여 새로운 배열을 생성하는 메소드이다.
copyOfRange()
public static int[] copyOf(int[] original, int from, int to)
배열의 일부분만 복사한다.
배열을 새로 생성하지않고 존재하는 배열에 복사하는 경우에는 System 클래스의 arraycopy()
메소드를 사용한다.
equals()
public static boolean equals(int[] a, int[] a2);
내용 비교가 아닌 참조 값을 비교한다!
public static void sort(int[] a)
순서상 인스턴스의 앞, 뒤 판단은 다음 인터페이스 구현을 기반으로 프로그래머가 클래스별로 결정하게 되어있다.
interface Comparable
위 인터페이스에 존재하는 추상메소드 compareTo()
의 구현 방법은 다음과 같다.
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ": " + age;
}
}
sort 메소드를 이용하여 오름차순 정렬을 하고자 한다면 Compareable 인터페이스를 다음과 같이 구현해야 한다.
나이가 어린 인스턴스의 크기가 작은 것으로 결정할 때,
class Person implements Comparable {
...
@Override
public int compareTo(Object o) {
Person p = (Person)o;
if(this.age > p.age)
return 1;
else if(this.age < p.age)
return -1
else
return 0;
}
}
사실 다음과 같이 간략하게 정의할 수도 있다.
@Override
public int compareTo(Object o) {
Person p = (Person)o;
return this.age - p.age;
}
public static int binarySearch(int[] a, int key);
배열이 정렬된 상태에서 사용해야 한다!