JavaTM 2 Platform
Standard Ed. 5.0

java.lang
인터페이스 Comparable<T>

알려진 서브 인터페이스 목록 :
Delayed, Name, ScheduledFuture <V>
알려진 구현 클래스 목록:
Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer, Calendar, Character, CharBuffer, Charset, CollationKey, CompositeName, CompoundName, Date, Date, Double, DoubleBuffer, ElementType, Enum, File, Float, FloatBuffer, Formatter.BigDecimalLayoutForm, FormSubmitEvent.MethodType, GregorianCalendar, IntBuffer, Integer, JTable.PrintMode, KeyRep.Type, LdapName, Long, LongBuffer, MappedByteBuffer, MemoryType, ObjectStreamField, Proxy.Type, Rdn, RetentionPolicy, RoundingMode, Short, ShortBuffer, SSLEngineResult.HandshakeStatus, SSLEngineResult.Status, String, Thread.State, Time, Timestamp, TimeUnit, URI, UUID

public interface Comparable<T>

이 인터페이스를 구현하는 각 클래스의 객체에 전체 순서부를 강제합니다. 이 순서부는 클래스의 「자연 순서부」라고 불려 이 클래스의 compareTo 메서드는 「자연 비교 메서드」라고 불립니다.

이 인터페이스를 구현하는 객체의 리스트 및 배열은, Collections.sortArrays.sort에 의해 자동적으로 소트 할 수 있습니다. 이 인터페이스를 구현하는 객체는 컴퍼레이터를 지정하지 않아도, 소트된 맵의 키 또는 소트된 세트의 요소로서 사용할 수 있습니다.

클래스 C 자연 순서부는 클래스 C 모든 e1e2에 대해, (e1.compareTo((Object) e2) == 0)e1.equals((Object) e2)와 같은 boolean 치를 보관 유지하는 경우에만, 「equals와 의 일관성」을 보관 유지합니다. null는 어느 클래스의 인스턴스이기도 하지 않습니다. e.equals(null)false를 돌려주는 경우에서도, e.compareTo(null)NullPointerException을 리턴합니다.

자연 순서부에서는 equals와 일관성이 있는 것은 필수가 아닙니다만 강하고 추천 됩니다. 이것은 명시적인 컴퍼레이터를 지정하지 않는 소트된 세트나 소트된 맵을 자연 순서부가 equals와 일관성이 없는 요소 또는 키와 함께 사용하면, 세트와 맵의 동작이 보증되지 않게 되기 때문입니다. 특히, 이러한 소트된 세트 또는 소트된 맵은 세트 또는 맵의 일반적인 규약에 위반합니다. 이 규약은, equals 메서드의 용어를 이용해 정의되고 있습니다.

예를 들어, (! a.equals((Object) b) && a.compareTo((Object) b) == 0)에 해당하는 2개의 키 ab를, 명시적인 컴퍼레이터를 지정하지 않는 소트된 세트에 가세하면, ab는 소트된 세트의 관점으로부터는 등가이므로 2번째의 add 오퍼레이션은 false를 돌려주고, 소트된 세트의 사이즈는 커지지 않습니다.

comparable를 구현하는 대부분의 Java 코어 클래스는 equals와 일관성이 있는 자연 순서부를 가집니다. 1개의 예외는 java.math.BigDecimal 입니다. 이 클래스의 자연 순서부에서는 다른 정밀도의 같은 값 (4.0 으로 4.00 등)을 가지는 BigDecimal 객체는 등가라고 보여집니다.

수학적으로는 임의의 클래스 C에 대해서 자연 순서부를 정의하는 「순서 관계」는 다음과 같이 됩니다.

{(x, y) such that x.compareTo((Object) y) <= 0}.
 
이 전체 순서의 「상」은 다음과 같습니다.

{(x, y) such that x.compareTo((Object) y) == 0}.  
compareTo 규약으로부터 판단해, 상이 C로 「동치 관계」에 있어, 자연 순서부가 C 「전체 순서」이다고 하는 것은 분명합니다. 클래스의 자연 순서부가 equals와 일관성이 있다고 하는 것은 자연 순서부의 상이 클래스의 다음의 equals(Object) 메서드로 정의되는 동치 관계가 되는 것을의미합니다.
 {(x, y) such that x.equals((Object) y)}.  

이 인터페이스는 Java Collections Framework 멤버입니다.

도입된 버전 :
1.2
관련 항목:
Comparator, Collections.sort(java.util.List), Arrays.sort(Object[]), SortedSet, SortedMap, TreeSet, TreeMap

메서드 개요
 int compareTo (T  o)
          이 객체와 지정된 객체의 순서를 비교합니다.
 

메서드의 상세

compareTo

int compareTo(T  o)
이 객체와 지정된 객체의 순서를 비교합니다. 이 객체가 지정된 객체보다 작은 경우는 부의 정수, 동일한 경우는 제로 큰 경우는 정의 정수를 리턴합니다.

전술의 설명에서는 sgn(expression) 라고 하는 표기는 수학 함수 signum 함수를 나타내, expression 값 (부의 수, 제로 정의 수)에 응해, -1, 0, 1 어떤 것인지를 리턴합니다. 구현에서는 모든 xy에 대해서 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)==0sgn(x.compareTo(z)) == sgn(y.compareTo(z))를 의미하는 일도 보증되지 않으면 안됩니다.

필수는 아니지만 (x.compareTo(y)==0) == (x.equals(y)) 인 것이 강하고 추천 됩니다. 일반적으로Comparable 인터페이스를 구현하고 있는 클래스에서 이 조건에 위반하는 클래스는 모두, 명확하게 이 사실을 나타낼 필요가 있습니다. 「주: 이 클래스는 equals와 일관성이 없는 자연 순서부를 가집니다」 등과 명시하는 것을 추천합니다.

파라미터:
o - 비교 대상의 Object
반환값:
이 객체가 지정된 객체보다 작은 경우는 부의 정수, 동일한 경우는 제로 큰 경우는 정의 정수
예외:
ClassCastException - 지정된 객체의 형태가 원인으로 이 Object와 비교할 수 없는 경우

JavaTM 2 Platform
Standard Ed. 5.0

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조하십시오.