Java中对象数组的排序

Java中对象数组的排序

在Java中排序似乎没有C++中那么方便,搜索了很久看了很多文章,大概都是说要用Arrays或ArrayList或List或Collection等来实现,最头疼的是源代码要分开多个文件(这应该是一个好习惯,可是ACM只允许提交一个源文件)。

最终在这篇文章的提示下依葫芦画瓢,源代码在一个文件中就可以了,对于一些不太复杂的情况还是挺好的。

import java.util.Arrays;
import java.util.Scanner;
 
class Student implements Comparable
{
	String name;
	int gpa;
 
	public int compareTo(Object o)
	{
		Student s = (Student) o;
 
		if (this.gpa == s.gpa) return this.name.compareTo(s.name);
 
		if (this.gpa < s.gpa) return -1;
		else if (this.gpa == s.gpa)	return 0;
		else return 1;
	}
}
 
public class Test
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		Student[] s = new Student[n];
 
		for (int i = 0; i != n; ++i)
		{
			s[i] = new Student();
			s[i].name = in.next();
			s[i].gpa = in.nextInt();
		}
 
		Arrays.sort(s);
 
		for (Student ss : s)
		{
			System.out.println(ss.name);
			System.out.println(ss.gpa);
		}
	}
}

比如输入是:

4
icycandy 40
icycandy 50
nicyun 40
ybbaigo 50

输出如下:

以下内容取至JavaApi:

Arrays.sort

public static void sort(Object[] a)
根据元素的 自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素都必须是 可相互比较的(也就是说,对于数组中的任何 e1 和  e2 元素而言, e1.compareTo(e2) 不得抛出  ClassCastException)。

保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

参数:
a - 要排序的数组
抛出:
ClassCastException - 如果数组包含不 可相互比较的 的元素(例如,字符串和整数)。

接口 Comparable<T>

类型参数:
T - 可以与此对象进行比较的那些对象的类型
所有已知子接口:
DelayedNameRunnableScheduledFuture<V>, ScheduledFuture<V>
所有已知实现类:
Authenticator.RequestorType, BigDecimalBigIntegerBooleanByteByteBufferCalendarCharacterCharBuffer, Charset, ClientInfoStatusCollationKeyComponent.BaselineResizeBehavior, CompositeNameCompoundName, DateDateDesktop.ActionDiagnostic.KindDialog.ModalExclusionType, Dialog.ModalityTypeDouble, DoubleBufferDropModeElementKind, ElementTypeEnumFileFloatFloatBuffer, Formatter.BigDecimalLayoutFormFormSubmitEvent.MethodTypeGregorianCalendar, GroupLayout.Alignment, IntBufferIntegerJavaFileObject.Kind, JTable.PrintModeKeyRep.Type, LayoutStyle.ComponentPlacement, LdapNameLongLongBufferMappedByteBufferMemoryType, MessageContext.Scope, ModifierMultipleGradientPaint.ColorSpaceTypeMultipleGradientPaint.CycleMethod, NestingKindNormalizer.Form, ObjectNameObjectStreamFieldProxy.Type, RdnResource.AuthenticationType, RetentionPolicyRoundingMode, RowFilter.ComparisonType, RowIdLifetimeRowSorterEvent.Type, Service.Mode, ShortShortBufferSOAPBinding.ParameterStyle, SOAPBinding.StyleSOAPBinding.Use, SortOrder, SourceVersionSSLEngineResult.HandshakeStatusSSLEngineResult.StatusStandardLocation, String, SwingWorker.StateValueThread.State, TimeTimestampTimeUnit, TrayIcon.MessageTypeTypeKindURIUUID, WebParam.ModeXmlAccessOrderXmlAccessTypeXmlNsForm

public interface Comparable<T>
 
 

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

实现此接口的对象列表(和数组)可以通过 Collections.sort(和Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器

对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使e.equals(null) 返回 falsee.compareTo(null) 也将抛出 NullPointerException

建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据equals 方法定义的集合(或映射表)的常规协定。

例如,如果将两个键 a 和 b 添加到没有使用显式比较器的有序集合中,使 (!a.equals(b) && a.compareTo(b) == 0),那么第二个add 操作将返回 false(有序集合的大小没有增加),因为从有序集合的角度来看,a 和 b 是相等的。

实际上,所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然排序。java.math.BigDecimal 是个例外,它的自然排序将值相等但精确度不同的BigDecimal 对象(比如 4.0 和 4.00)视为相等。

从数学上讲,定义给定类 C 上自然排序的关系式 如下:

      {(x, y)|x.compareTo(y) <= 0}。
整体排序的  是:
      {(x, y)|x.compareTo(y) == 0}。
它直接遵循  compareTo  的协定,商是  C  的 等价关系 ,自然排序是  C  的 整体排序 。当说到类的自然排序 与 equals 一致  时,是指自然排序的商是由类的 equals(Object)  方法定义的等价关系。
    {(x, y)|x.equals(y)}。

此接口是 Java Collections Framework 的成员。

从以下版本开始:
1.2
另请参见:
Comparator

方法摘要
intcompareTo(T o)
比较此对象与指定对象的顺序。

方法详细信息

compareTo

int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果y.compareTo(x)抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)

实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0

最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐(x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据expression 的值是负数、零还是正数,分别返回-10 或 1 中的一个值。

参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较



icycandy
40
nicyun
40
icycandy
50
ybbaigo

50



以下内容取至JavaApi:

Arrays.sort

public static void sort(Object[] a)
根据元素的 自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素都必须是 可相互比较的(也就是说,对于数组中的任何 e1 和  e2 元素而言, e1.compareTo(e2) 不得抛出  ClassCastException)。

保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

参数:
a - 要排序的数组
抛出:
ClassCastException - 如果数组包含不 可相互比较的 的元素(例如,字符串和整数)。

接口 Comparable<T>

类型参数:
T - 可以与此对象进行比较的那些对象的类型
所有已知子接口:
DelayedNameRunnableScheduledFuture<V>, ScheduledFuture<V>
所有已知实现类:
Authenticator.RequestorType, BigDecimalBigIntegerBooleanByteByteBufferCalendarCharacterCharBuffer, Charset, ClientInfoStatusCollationKeyComponent.BaselineResizeBehavior, CompositeNameCompoundName, DateDateDesktop.ActionDiagnostic.KindDialog.ModalExclusionType, Dialog.ModalityTypeDouble, DoubleBufferDropModeElementKind, ElementTypeEnumFileFloatFloatBuffer, Formatter.BigDecimalLayoutFormFormSubmitEvent.MethodTypeGregorianCalendar, GroupLayout.Alignment, IntBufferIntegerJavaFileObject.Kind, JTable.PrintModeKeyRep.Type, LayoutStyle.ComponentPlacement, LdapNameLongLongBufferMappedByteBufferMemoryType, MessageContext.Scope, ModifierMultipleGradientPaint.ColorSpaceTypeMultipleGradientPaint.CycleMethod, NestingKindNormalizer.Form, ObjectNameObjectStreamFieldProxy.Type, RdnResource.AuthenticationType, RetentionPolicyRoundingMode, RowFilter.ComparisonType, RowIdLifetimeRowSorterEvent.Type, Service.Mode, ShortShortBufferSOAPBinding.ParameterStyle, SOAPBinding.StyleSOAPBinding.Use, SortOrder, SourceVersionSSLEngineResult.HandshakeStatusSSLEngineResult.StatusStandardLocation, String, SwingWorker.StateValueThread.State, TimeTimestampTimeUnit, TrayIcon.MessageTypeTypeKindURIUUID, WebParam.ModeXmlAccessOrderXmlAccessTypeXmlNsForm

public interface Comparable<T>
 
 

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

实现此接口的对象列表(和数组)可以通过 Collections.sort(和Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器

对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使e.equals(null) 返回 falsee.compareTo(null) 也将抛出 NullPointerException

建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据equals 方法定义的集合(或映射表)的常规协定。

例如,如果将两个键 a 和 b 添加到没有使用显式比较器的有序集合中,使 (!a.equals(b) && a.compareTo(b) == 0),那么第二个add 操作将返回 false(有序集合的大小没有增加),因为从有序集合的角度来看,a 和 b 是相等的。

实际上,所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然排序。java.math.BigDecimal 是个例外,它的自然排序将值相等但精确度不同的BigDecimal 对象(比如 4.0 和 4.00)视为相等。

从数学上讲,定义给定类 C 上自然排序的关系式 如下:

      {(x, y)|x.compareTo(y) <= 0}。
整体排序的  是:
      {(x, y)|x.compareTo(y) == 0}。
它直接遵循  compareTo  的协定,商是  C  的 等价关系 ,自然排序是  C  的 整体排序 。当说到类的自然排序 与 equals 一致  时,是指自然排序的商是由类的 equals(Object)  方法定义的等价关系。
    {(x, y)|x.equals(y)}。

此接口是 Java Collections Framework 的成员。

从以下版本开始:
1.2
另请参见:
Comparator

方法摘要
intcompareTo(T o)
比较此对象与指定对象的顺序。

方法详细信息

compareTo

int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果y.compareTo(x)抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)

实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0

最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐(x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据expression 的值是负数、零还是正数,分别返回-10 或 1 中的一个值。

参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较



icycandy
40
nicyun
40
icycandy
50
ybbaigo

50




以下内容取至JavaApi:

Arrays.sort

public static void sort(Object[] a)
根据元素的 自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素都必须是 可相互比较的(也就是说,对于数组中的任何 e1 和  e2 元素而言, e1.compareTo(e2) 不得抛出  ClassCastException)。

保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

参数:
a - 要排序的数组
抛出:
ClassCastException - 如果数组包含不 可相互比较的 的元素(例如,字符串和整数)。

接口 Comparable<T>

类型参数:
T - 可以与此对象进行比较的那些对象的类型
所有已知子接口:
DelayedNameRunnableScheduledFuture<V>, ScheduledFuture<V>
所有已知实现类:
Authenticator.RequestorType, BigDecimalBigIntegerBooleanByteByteBufferCalendarCharacterCharBuffer, Charset, ClientInfoStatusCollationKeyComponent.BaselineResizeBehavior, CompositeNameCompoundName, DateDateDesktop.ActionDiagnostic.KindDialog.ModalExclusionType, Dialog.ModalityTypeDouble, DoubleBufferDropModeElementKind, ElementTypeEnumFileFloatFloatBuffer, Formatter.BigDecimalLayoutFormFormSubmitEvent.MethodTypeGregorianCalendar, GroupLayout.Alignment, IntBufferIntegerJavaFileObject.Kind, JTable.PrintModeKeyRep.Type, LayoutStyle.ComponentPlacement, LdapNameLongLongBufferMappedByteBufferMemoryType, MessageContext.Scope, ModifierMultipleGradientPaint.ColorSpaceTypeMultipleGradientPaint.CycleMethod, NestingKindNormalizer.Form, ObjectNameObjectStreamFieldProxy.Type, RdnResource.AuthenticationType, RetentionPolicyRoundingMode, RowFilter.ComparisonType, RowIdLifetimeRowSorterEvent.Type, Service.Mode, ShortShortBufferSOAPBinding.ParameterStyle, SOAPBinding.StyleSOAPBinding.Use, SortOrder, SourceVersionSSLEngineResult.HandshakeStatusSSLEngineResult.StatusStandardLocation, String, SwingWorker.StateValueThread.State, TimeTimestampTimeUnit, TrayIcon.MessageTypeTypeKindURIUUID, WebParam.ModeXmlAccessOrderXmlAccessTypeXmlNsForm

public interface Comparable<T>
 
 

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

实现此接口的对象列表(和数组)可以通过 Collections.sort(和Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器

对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使e.equals(null) 返回 falsee.compareTo(null) 也将抛出 NullPointerException

建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据equals 方法定义的集合(或映射表)的常规协定。

例如,如果将两个键 a 和 b 添加到没有使用显式比较器的有序集合中,使 (!a.equals(b) && a.compareTo(b) == 0),那么第二个add 操作将返回 false(有序集合的大小没有增加),因为从有序集合的角度来看,a 和 b 是相等的。

实际上,所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然排序。java.math.BigDecimal 是个例外,它的自然排序将值相等但精确度不同的BigDecimal 对象(比如 4.0 和 4.00)视为相等。

从数学上讲,定义给定类 C 上自然排序的关系式 如下:

      {(x, y)|x.compareTo(y) <= 0}。
整体排序的  是:
      {(x, y)|x.compareTo(y) == 0}。
它直接遵循  compareTo  的协定,商是  C  的 等价关系 ,自然排序是  C  的 整体排序 。当说到类的自然排序 与 equals 一致  时,是指自然排序的商是由类的 equals(Object)  方法定义的等价关系。
    {(x, y)|x.equals(y)}。

此接口是 Java Collections Framework 的成员。

从以下版本开始:
1.2
另请参见:
Comparator

方法摘要
intcompareTo(T o)
比较此对象与指定对象的顺序。

方法详细信息

compareTo

int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果y.compareTo(x)抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)

实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0

最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐(x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据expression 的值是负数、零还是正数,分别返回-10 或 1 中的一个值。

参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较

以下内容取至JavaApi:

Arrays.sort

public static void sort(Object[] a)
根据元素的 自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元素都必须是 可相互比较的(也就是说,对于数组中的任何 e1 和  e2 元素而言, e1.compareTo(e2) 不得抛出  ClassCastException)。

保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。

参数:
a - 要排序的数组
抛出:
ClassCastException - 如果数组包含不 可相互比较的 的元素(例如,字符串和整数)。

接口 Comparable<T>

类型参数:
T - 可以与此对象进行比较的那些对象的类型
所有已知子接口:
DelayedNameRunnableScheduledFuture<V>, ScheduledFuture<V>
所有已知实现类:
Authenticator.RequestorType, BigDecimalBigIntegerBooleanByteByteBufferCalendarCharacterCharBuffer, Charset, ClientInfoStatusCollationKeyComponent.BaselineResizeBehavior, CompositeNameCompoundName, DateDateDesktop.ActionDiagnostic.KindDialog.ModalExclusionType, Dialog.ModalityTypeDouble, DoubleBufferDropModeElementKind, ElementTypeEnumFileFloatFloatBuffer, Formatter.BigDecimalLayoutFormFormSubmitEvent.MethodTypeGregorianCalendar, GroupLayout.Alignment, IntBufferIntegerJavaFileObject.Kind, JTable.PrintModeKeyRep.Type, LayoutStyle.ComponentPlacement, LdapNameLongLongBufferMappedByteBufferMemoryType, MessageContext.Scope, ModifierMultipleGradientPaint.ColorSpaceTypeMultipleGradientPaint.CycleMethod, NestingKindNormalizer.Form, ObjectNameObjectStreamFieldProxy.Type, RdnResource.AuthenticationType, RetentionPolicyRoundingMode, RowFilter.ComparisonType, RowIdLifetimeRowSorterEvent.Type, Service.Mode, ShortShortBufferSOAPBinding.ParameterStyle, SOAPBinding.StyleSOAPBinding.Use, SortOrder, SourceVersionSSLEngineResult.HandshakeStatusSSLEngineResult.StatusStandardLocation, String, SwingWorker.StateValueThread.State, TimeTimestampTimeUnit, TrayIcon.MessageTypeTypeKindURIUUID, WebParam.ModeXmlAccessOrderXmlAccessTypeXmlNsForm

public interface Comparable<T>
 
 

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

实现此接口的对象列表(和数组)可以通过 Collections.sort(和Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器

对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使e.equals(null) 返回 falsee.compareTo(null) 也将抛出 NullPointerException

建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据equals 方法定义的集合(或映射表)的常规协定。

例如,如果将两个键 a 和 b 添加到没有使用显式比较器的有序集合中,使 (!a.equals(b) && a.compareTo(b) == 0),那么第二个add 操作将返回 false(有序集合的大小没有增加),因为从有序集合的角度来看,a 和 b 是相等的。

实际上,所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然排序。java.math.BigDecimal 是个例外,它的自然排序将值相等但精确度不同的BigDecimal 对象(比如 4.0 和 4.00)视为相等。

从数学上讲,定义给定类 C 上自然排序的关系式 如下:

      {(x, y)|x.compareTo(y) <= 0}。
整体排序的  是:
      {(x, y)|x.compareTo(y) == 0}。
它直接遵循  compareTo  的协定,商是  C  的 等价关系 ,自然排序是  C  的 整体排序 。当说到类的自然排序 与 equals 一致  时,是指自然排序的商是由类的 equals(Object)  方法定义的等价关系。
    {(x, y)|x.equals(y)}。

此接口是 Java Collections Framework 的成员。

从以下版本开始:
1.2
另请参见:
Comparator

方法摘要
intcompareTo(T o)
比较此对象与指定对象的顺序。

方法详细信息

compareTo

int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果y.compareTo(x)抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)

实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0

最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐(x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据expression 的值是负数、零还是正数,分别返回-10 或 1 中的一个值。

参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较

icycandy
40
nicyun
40
icycandy
50
ybbaigo

50


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值