[Java] StringTokenizer & Arrays Class

✨New Wisdom✨·2020년 12월 10일
1

📕 Java 📕

목록 보기
5/24
post-thumbnail

이 노트는 "윤성우의 열혈 java 프로그래밍" 책을 공부하면서
내가 이해한대로 다시 정리하면서 작성되었다.

StringTokenizer 클래스

StringTokenizer 클래스는 구분자를 기준으로 문자열을 나눠 토큰을 만든다. 구분자는 토큰으로 구분되지 않고 버려진다. 구분자도 토큰으로 반환하고 싶다면 3번째 인자로 true를 준다.

인스턴스 생성

StringTokenizer st = new StringTokenizer("PM:08:45",":");

example

StringTokenizer st = new StringTokenizer("12 + 36 - 8 / 2 = 44","+-/= ");

구분자는 둘 이상을 둘 수 있다.
공백 문자도 포함할 수 있다.

메소드

hasMoreTokens()
반환할 토큰이 남아 있는가?
nextToken()
다음 토큰을 반환한다. 반환할 토큰이 없는 상태에서 이 메소드가 호출되면 예외가 발생한다.

Arrays 클래스

배열 조작에 도움을 주는 메소들을 모은 클래스로, 배열의 복사, 비교, 정렬 및 탐색과 관련된 코드를 비교적 쉽게 작성할 수 있다.

메소드

배열의 복사

copyOf()

public static int[] copyOf(int[] original, int newLength)
  • original에 전달된 배열을 첫 번째 요소부터 newLength의 길이만큼 복사한다.
  • 모든 기본 자료형의 배열에 대해 오버로딩 되어있다.

배열을 복사하여 새로운 배열을 생성하는 메소드이다.

copyOfRange()

public static int[] copyOf(int[] original, int from, int to)
  • original에 전달된 배열을 인덱스 from부터 to 이전 요소까지 복사
  • 모든 기본 자료형의 배열에 대해 오버로딩 되어있다.

배열의 일부분만 복사한다.
배열을 새로 생성하지않고 존재하는 배열에 복사하는 경우에는 System 클래스의 arraycopy() 메소드를 사용한다.

배열의 비교

equals()

public static boolean equals(int[] a, int[] a2);
  • 매개변수 a와 a2로 전달된 배열의 내용을 비교해 boolean 값 반환.

내용 비교가 아닌 참조 값을 비교한다!

배열의 정렬

public static void sort(int[] a)
  • 매개변수 a로 전달된 배열을 오름차순으로 정렬

순서상 인스턴스의 앞, 뒤 판단은 다음 인터페이스 구현을 기반으로 프로그래머가 클래스별로 결정하게 되어있다.

interface Comparable
  • int compareTo(Object o)메소드 구현을 통해 인스턴스 순서 판단 기준을 결정한다.

위 인터페이스에 존재하는 추상메소드 compareTo() 의 구현 방법은 다음과 같다.

  • 인자로 전달된 o가 작다면 양의 정수를 반환.
  • 인자로 전단된 o가 크다면 음의 정수 반환.
  • 인자로 전단된 와 같다면 0 반환.
    example
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;
    }
}
  • sort 메소드 내에서는 이 메소드의 호출 결과로 반환되는 값을 기준으로 정렬을 진행한다.

사실 다음과 같이 간략하게 정의할 수도 있다.

@Override
public int compareTo(Object o) {
	Person p = (Person)o;
    return this.age - p.age;
}

배열의 탐색

public static int binarySearch(int[] a, int key);
  • 배열 a에서 key를 찾아서 존재하면 인덱스 값, 없으면 0보다 작은 수 반환.
  • 모든 기본 자료형의 배열에 대해 오버로딩 되어있다.

배열이 정렬된 상태에서 사용해야 한다!

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/

0개의 댓글