|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
T
- 이 객체가 비교되는 객체의 형태public interface Comparable<T>
이 인터페이스를 구현하는 각 클래스의 객체에 전체 순서부를 강제합니다. 이 순서부는 클래스의 「자연 순서부」라고 불려 이 클래스의 compareTo 메소드는 「자연 비교 메소드」라고 불립니다.
이 인터페이스를 구현하는 객체의 리스트 및 배열은,Collections.sort
및 Arrays.sort
에 의해 자동적으로 소트 할 수 있습니다. 이 인터페이스를 구현하는 객체는,Comparator를 지정하지 않아도,소트 된 맵 의 키 또는 소트 된 세트 의 요소로서 사용할 수 있습니다.
C 클래스의 자연 순서부는,C 클래스의 모든 e1 및 e2 에 대해,e1.compareTo(e2) == 0 이 e1.equals(e2) 와 같은 boolean 치를 보관 유지하는 경우에만, 「equals 와의 일관성」을 보관 유지합니다. null 는, 어느 클래스의 인스턴스이기도 하지 않습니다. e.equals(null) 가 false 를 돌려주는 경우에서도,e.compareTo(null) 는 NullPointerException 를 돌려줍니다.
자연 순서부에서는, equals 와 일관성이 있는 것은, 필수가 아닙니다만 강하고 추천 됩니다. 이것은, 명시적인 Comparator를 지정하지 않는 소트 된 세트나 소트 된 맵을, 자연 순서부가 equals 와 일관성이 없는 요소 또는 키와 함께 사용하면(자), 세트와 맵의 동작이 보증되지 않게 되기 때문입니다. 특히, 이러한 소트 된 세트 또는 소트 된 맵은, 세트 또는 맵의 일반적인 규약에 위반합니다. 이 규약은,equals 메소드의 용어를 이용해 정의되고 있습니다.
예를 들어,(! a.equals(b) && a.compareTo(b) == 0) 에 해당하는 2 개의 키 a 와 b 를, 명시적인 Comparator를 지정하지 않는 소트 된 세트에 가세하면(자),a 와 b 는 소트 된 세트의 관점으로부터는 등가이므로, 2 번째의 add 오퍼레이션은 false 를 돌려주어, 소트 된 세트의 사이즈는 커지지 않습니다.
Comparable 를 구현하는 대부분의 Java 코어 클래스는, equals 와 일관성이 있는 자연 순서부를 가집니다. 1 개의 예외는 java.math.BigDecimal 입니다. 이 클래스의 자연 순서부에서는, 다른 정밀도의 같은 값 (4.0 으로 4.00 등)을 가지는 BigDecimal 객체는 등가라고 보여집니다.
수학적으로는, 임의의 클래스 C 에 대해서 자연 순서부를 정의하는 「순서 관계」는 다음과 같이 됩니다.
{(x, y) such that x.compareTo(y) <= 0}.이 전체 순서의 「상」은 다음과 같습니다.
{(x, y) such that x.compareTo(y) == 0}.compareTo 의 규약으로부터 판단해, 상이 C 로 「동치 관계」에 있어, 자연 순서부가 C 의 「전체 순서」이다고 하는 것은 분명합니다. 클래스의 자연 순서부가 equals 와 일관성이 있다고 하는 것은, 자연 순서부의 상이 클래스의 다음의
equals(Object)
메소드로 정의되는 동치 관계가 되는 것을 의미합니다. {(x, y) such that x.equals(y)}.
이 인터페이스는,Java Collections Framework 의 멤버입니다.
Comparator
메소드의 개요 | |
---|---|
int |
compareTo (T o)
이 객체와 지정된 객체의 순서를 비교합니다. |
메소드의 상세 |
---|
int compareTo(T o)
구현에서는, 모든 x 와 y 에 대해서 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 가 보증되지 않으면 안됩니다. 이것은,y.compareTo(x) 가 예외를 throw 하는 경우는 x.compareTo(y) 도 예외를 throw 하는 것을 의미합니다.
구현에서는, 순서 관계가 추이적인 것도 보증되지 않으면 안됩니다. 즉,(x.compareTo(y) >0 && y.compareTo(z) >0) 는 x.compareTo(z) >0 를 의미합니다.
게다가 모든 z 에 대해서 x.compareTo(y)==0 가 sgn(x.compareTo(z)) == sgn(y.compareTo(z)) 를 의미하는 일도 보증되지 않으면 안됩니다.
필수라고 하는 것은 아닙니다만,(x.compareTo(y)==0) == (x.equals(y)) 인 것이 강하고 추천 됩니다. 일반적으로,Comparable 인터페이스를 구현하고 있는 클래스에서, 이 조건에 위반하는 클래스는 모두, 명확하게 이 사실을 나타낼 필요가 있습니다. 「주:이 클래스는 equals 와 일관성이 없는 자연 순서부를 가집니다」 등과 명시하는 것을 추천합니다.
전술의 설명에서는,sgn(expression) 라고 하는 표기는 수학 함수 signum 함수를 나타내,expression 의 값 (부의 수, 제로, 정의 수)에 응해,-1,0,1 의 어떤 것인지를 돌려줍니다.
o
- 비교 대상의 객체
ClassCastException
- 지정된 객체의 형태가 원인으로, 이 객체와 비교할 수 없는 경우
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.