I have a question about ascending order sorting using the Comparabe interface:

When I add the keys of my Hash Map to a TreeSet object and implement the compareTo as below, I get descending order of sorting of names:

   public int compareTo (Accounts a)
                    return a.name.compareTo(this.name);

  // But when I change the above code to as below, it sorts the names in ascending order:

public int compareTo (Accounts a)
        return this.name.compareTo(a.name);

Could someone explain me why?

Thank you!

2 Years
Discussion Span
Last Post by sciprog22

Using your first definition account1.compareTo(account2) will call account2.name.compareTo(account1.name) and using your second definition it will call account1.name.compareTo(account2.name). So using the result of the comparisson will be the other way around and thus the sort order is reversed.


Thank you for the reply!

Isn't TreeSet always sorting in ascending order?

If account2.name > account1.name, compareTo returns a positive number

If account1.name < account2.name, compareTo returns a negative number.

Either way, shouldn't the ascending order be the same since negative is always < positive and positive is always > negative

Thank you!

Edited by sciprog22


"ascending" is defined by the compareTo method.
a,b is ascending iff a.compareTo(b) >0

If you reverse the test inside the compareTo so that a.compareTo(b) <0 then you have just definied a,b as a descending sequence.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.