23

I want to create a TreeMap in Java with a custom sort order. The sorted keys which are string need to be sorted according to the second character. The values are also string.

Sample map:

Za,FOO
Ab,Bar
2
  • A TreeMap doesn't use hashCode(). What do you mean by "a sorted hash"? Do you mean to say SortedMap<K,V>? Commented May 1, 2010 at 4:17
  • 2
    @kunjaan - In Java terminology, an associative array is referred to as a "map" not a "hash" ... especially when you are talking about a Map type that does not use hashing! Commented May 1, 2010 at 6:12

2 Answers 2

36

You can use a custom comparator like this:

    Comparator<String> secondCharComparator = new Comparator<String>() {
        @Override public int compare(String s1, String s2) {
            return s1.substring(1, 2).compareTo(s2.substring(1, 2));
        }           
    };

Sample:

    SortedMap<String,String> map =
        new TreeMap<String,String>(secondCharComparator);
    map.put("Za", "FOO");
    map.put("Ab", "BAR");
    map.put("00", "ZERO");
    System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"

Note that this simply assumes that the String has a character at index 1. It throws StringIndexOutOfBoundsException if it doesn't.


Alternatively, you can also use this comparison:

return s1.charAt(1) - s2.charAt(1);

This subtraction "trick" is broken in general, but it works fine here because the subtraction of two char will not overflow an int.

The substring andcompareTo solution above is more readable, though.

See also:

Sign up to request clarification or add additional context in comments.

Comments

0

Assuming you don't mean Hash as in hash function or the sort...

You could easily accomplish this by creating a "wrapper" class for String and overriding the compareTo method

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.