<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FCollections%2FComparator_Interface</id>
		<title>Java Tutorial/Collections/Comparator Interface - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FCollections%2FComparator_Interface"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Collections/Comparator_Interface&amp;action=history"/>
		<updated>2026-04-23T17:33:58Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Collections/Comparator_Interface&amp;diff=4758&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Collections/Comparator_Interface&amp;diff=4758&amp;oldid=prev"/>
				<updated>2010-06-01T05:05:41Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:05, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Collections/Comparator_Interface&amp;diff=4757&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Collections/Comparator_Interface&amp;diff=4757&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Calendar Comparator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Hibernate, Relational Persistence for Idiomatic Java&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as&lt;br /&gt;
 * indicated by the @author tags or express copyright attribution&lt;br /&gt;
 * statements applied by the authors.  All third-party contributions are&lt;br /&gt;
 * distributed under license by Red Hat Middleware LLC.&lt;br /&gt;
 *&lt;br /&gt;
 * This copyrighted material is made available to anyone wishing to use, modify,&lt;br /&gt;
 * copy, or redistribute it subject to the terms and conditions of the GNU&lt;br /&gt;
 * Lesser General Public License, as published by the Free Software Foundation.&lt;br /&gt;
 *&lt;br /&gt;
 * This program is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License&lt;br /&gt;
 * for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public License&lt;br /&gt;
 * along with this distribution; if not, write to:&lt;br /&gt;
 * Free Software Foundation, Inc.&lt;br /&gt;
 * 51 Franklin Street, Fifth Floor&lt;br /&gt;
 * Boston, MA  02110-1301  USA&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.util.Calendar;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
/**&lt;br /&gt;
 * @author Gavin King&lt;br /&gt;
 */&lt;br /&gt;
public class CalendarComparator implements Comparator {&lt;br /&gt;
  public int compare(Object x, Object y) {&lt;br /&gt;
    Calendar xcal = (Calendar) x;&lt;br /&gt;
    Calendar ycal = (Calendar) y;&lt;br /&gt;
    if ( xcal.before(ycal) ) return -1;&lt;br /&gt;
    if ( xcal.after(ycal) ) return 1;&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  public static final Comparator INSTANCE = new CalendarComparator();&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Comparator uses a Collator to determine the proper, case-insensitive lexicographical ordering of two strings. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.text.Collator;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
class IgnoreCaseComp implements Comparator&amp;lt;String&amp;gt; {&lt;br /&gt;
  Collator col;&lt;br /&gt;
  IgnoreCaseComp() {&lt;br /&gt;
    col = Collator.getInstance();&lt;br /&gt;
    col.setStrength(Collator.PRIMARY);&lt;br /&gt;
  }&lt;br /&gt;
  public int compare(String strA, String strB) {&lt;br /&gt;
    return col.rupare(strA, strB);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Getting reverse order comparator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import java.util.Collections;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    Comparator comp = Collections.reverseOrder();&lt;br /&gt;
    String[] a = new String[] { &amp;quot;A&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;B&amp;quot; };&lt;br /&gt;
    Arrays.sort(a, comp);&lt;br /&gt;
    for (int i = 0, n = a.length; i &amp;lt; n; i++) {&lt;br /&gt;
      System.out.println(a[i]);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;C&lt;br /&gt;
B&lt;br /&gt;
A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Implementing a Comparator for a class ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
class CompTypeComparator implements Comparator {&lt;br /&gt;
  public int compare(Object o1, Object o2) {&lt;br /&gt;
    int j1 = ((Integer) o1);&lt;br /&gt;
    int j2 = ((Integer) o2);&lt;br /&gt;
    return (j1 &amp;lt; j2 ? -1 : (j1 == j2 ? 0 : 1));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Integer[] a = new Integer[10];&lt;br /&gt;
    for (int i = 0; i &amp;lt; a.length; i++) {&lt;br /&gt;
      a[i]= i;&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;before sorting, a = &amp;quot; + Arrays.asList(a));&lt;br /&gt;
    Arrays.sort(a, new CompTypeComparator());&lt;br /&gt;
    System.out.println(&amp;quot;after sorting, a = &amp;quot; + Arrays.asList(a));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/**/&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;before sorting, a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;br /&gt;
after sorting, a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Invertible Comparator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.Serializable;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
/*&lt;br /&gt;
 * Copyright 2002-2005 the original author or authors.&lt;br /&gt;
 *&lt;br /&gt;
 * Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
 * you may not use this file except in compliance with the License.&lt;br /&gt;
 * You may obtain a copy of the License at&lt;br /&gt;
 *&lt;br /&gt;
 *      http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
 *&lt;br /&gt;
 * Unless required by applicable law or agreed to in writing, software&lt;br /&gt;
 * distributed under the License is distributed on an &amp;quot;AS IS&amp;quot; BASIS,&lt;br /&gt;
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;
 * See the License for the specific language governing permissions and&lt;br /&gt;
 * limitations under the License.&lt;br /&gt;
 */&lt;br /&gt;
/**&lt;br /&gt;
 * A decorator for a comparator, with an &amp;quot;ascending&amp;quot; flag denoting&lt;br /&gt;
 * whether comparison results should be treated in forward (standard&lt;br /&gt;
 * ascending) order or flipped for reverse (descending) order.&lt;br /&gt;
 * &lt;br /&gt;
 * @author Keith Donald&lt;br /&gt;
 * @author Juergen Hoeller&lt;br /&gt;
 * @since 1.2.2&lt;br /&gt;
 */&lt;br /&gt;
public class InvertibleComparator implements Comparator, Serializable {&lt;br /&gt;
  private final Comparator comparator;&lt;br /&gt;
  private boolean ascending = true;&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Create an InvertibleComparator that sorts ascending by default.&lt;br /&gt;
   * For the actual comparison, the specified Comparator will be used.&lt;br /&gt;
   * @param comparator the comparator to decorate&lt;br /&gt;
   */&lt;br /&gt;
  public InvertibleComparator(Comparator comparator) {&lt;br /&gt;
    this.ruparator = comparator;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Create an InvertibleComparator that sorts based on the provided order.&lt;br /&gt;
   * For the actual comparison, the specified Comparator will be used.&lt;br /&gt;
   * @param comparator the comparator to decorate&lt;br /&gt;
   * @param ascending the sort order: ascending (true) or descending (false)&lt;br /&gt;
   */&lt;br /&gt;
  public InvertibleComparator(Comparator comparator, boolean ascending) {&lt;br /&gt;
    this.ruparator = comparator;&lt;br /&gt;
    setAscending(ascending);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Specify the sort order: ascending (true) or descending (false).&lt;br /&gt;
   */&lt;br /&gt;
  public void setAscending(boolean ascending) {&lt;br /&gt;
    this.ascending = ascending;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Return the sort order: ascending (true) or descending (false).&lt;br /&gt;
   */&lt;br /&gt;
  public boolean isAscending() {&lt;br /&gt;
    return ascending;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Invert the sort order: ascending -&amp;gt; descending or&lt;br /&gt;
   * descending -&amp;gt; ascending.&lt;br /&gt;
   */&lt;br /&gt;
  public void invertOrder() {&lt;br /&gt;
    this.ascending = !this.ascending;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public int compare(Object o1, Object o2) {&lt;br /&gt;
    int result = this.ruparator.rupare(o1, o2);&lt;br /&gt;
    if (result != 0) {&lt;br /&gt;
      // Invert the order if it is a reverse sort.&lt;br /&gt;
      if (!this.ascending) {&lt;br /&gt;
        if (Integer.MIN_VALUE == result) {&lt;br /&gt;
          result = Integer.MAX_VALUE;&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
          result *= -1;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      return result;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
  public boolean equals(Object obj) {&lt;br /&gt;
    if (this == obj) {&lt;br /&gt;
      return true;&lt;br /&gt;
    }&lt;br /&gt;
    if (!(obj instanceof InvertibleComparator)) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    InvertibleComparator other = (InvertibleComparator) obj;&lt;br /&gt;
    return (this.ruparator.equals(other.ruparator) &amp;amp;&amp;amp; this.ascending == other.ascending);&lt;br /&gt;
  }&lt;br /&gt;
  public int hashCode() {&lt;br /&gt;
    return this.ruparator.hashCode();&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;InvertibleComparator: [&amp;quot; + this.ruparator + &amp;quot;]; ascending=&amp;quot; + this.ascending;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Sort an array of strings, ignore case difference. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
class MyComparator implements Comparator&amp;lt;String&amp;gt; {&lt;br /&gt;
  public int compare(String strA, String strB) {&lt;br /&gt;
    return strA.rupareToIgnoreCase(strB);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    String strs[] = { &amp;quot;a&amp;quot;, &amp;quot;G&amp;quot;, &amp;quot;g&amp;quot;, &amp;quot;b&amp;quot;, };&lt;br /&gt;
    MyComparator icc = new MyComparator();&lt;br /&gt;
    Arrays.sort(strs, icc);&lt;br /&gt;
    for (String s : strs) {&lt;br /&gt;
      System.out.println(s + &amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    Arrays.sort(strs);&lt;br /&gt;
    System.out.print(&amp;quot;Default, case-sensitive sorted order: &amp;quot;);&lt;br /&gt;
    for (String s : strs) {&lt;br /&gt;
      System.out.println(s + &amp;quot; &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
a &lt;br /&gt;
b &lt;br /&gt;
G &lt;br /&gt;
g &lt;br /&gt;
Default, case-sensitive sorted order: G &lt;br /&gt;
a &lt;br /&gt;
b &lt;br /&gt;
g &lt;br /&gt;
*/&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Sort an array of strings in reverse order. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
class MyComparator implements Comparator&amp;lt;String&amp;gt; {&lt;br /&gt;
  public int compare(String strA, String strB) {&lt;br /&gt;
    return strB.rupareTo(strA);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] argv) throws Exception {&lt;br /&gt;
    String strs[] = { &amp;quot;d&amp;quot;, &amp;quot;h&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;t&amp;quot; };&lt;br /&gt;
    MyComparator rsc = new MyComparator();&lt;br /&gt;
    Arrays.sort(strs, rsc);&lt;br /&gt;
    for (String s : strs)&lt;br /&gt;
      System.out.println(s + &amp;quot; &amp;quot;);&lt;br /&gt;
    Arrays.sort(strs);&lt;br /&gt;
    System.out.print(&amp;quot;Sorted in natural order: &amp;quot;);&lt;br /&gt;
    for (String s : strs)&lt;br /&gt;
      System.out.println(s + &amp;quot; &amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
t &lt;br /&gt;
h &lt;br /&gt;
d &lt;br /&gt;
c &lt;br /&gt;
a &lt;br /&gt;
Sorted in natural order: a &lt;br /&gt;
c &lt;br /&gt;
d &lt;br /&gt;
h &lt;br /&gt;
t &lt;br /&gt;
*/&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  System-Defined Comparable Classes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CLASS NAMEORDERINGBigDecimalNumerical (signed)BigIntegerNumerical (signed)ByteNumerical (signed)CharacterNumerical (unsigned)CollationKeyAlphabetical, by localeDateChronologicalDoubleNumerical (signed)FileAlphabetical of pathFloatNumerical (signed)IntegerNumerical (signed)LongNumerical (signed)ObjectStreamFieldAlphabetical of type stringShortNumerical (signed)StringAlphabetical&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Use a comparator to sort accounts by last name. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
import java.util.Set;&lt;br /&gt;
import java.util.TreeMap;&lt;br /&gt;
class TComp implements Comparator&amp;lt;String&amp;gt; {&lt;br /&gt;
  public int compare(String a, String b) {&lt;br /&gt;
    int i, j, k;&lt;br /&gt;
    String aStr, bStr;&lt;br /&gt;
    aStr = a;&lt;br /&gt;
    bStr = b;&lt;br /&gt;
    i = aStr.lastIndexOf(&amp;quot; &amp;quot;);&lt;br /&gt;
    j = bStr.lastIndexOf(&amp;quot; &amp;quot;);&lt;br /&gt;
    k = aStr.substring(i).rupareTo(bStr.substring(j));&lt;br /&gt;
    if (k == 0) // last names match, check entire name&lt;br /&gt;
      return aStr.rupareTo(bStr);&lt;br /&gt;
    else&lt;br /&gt;
      return k;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class TreeMapDemo2 {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    TreeMap&amp;lt;String, Double&amp;gt; tm = new TreeMap&amp;lt;String, Double&amp;gt;(new TComp());&lt;br /&gt;
    tm.put(&amp;quot;J D&amp;quot;, new Double(3434.34));&lt;br /&gt;
    tm.put(&amp;quot;T S&amp;quot;, new Double(123.22));&lt;br /&gt;
    tm.put(&amp;quot;J B&amp;quot;, new Double(1378.00));&lt;br /&gt;
    tm.put(&amp;quot;T H&amp;quot;, new Double(99.22));&lt;br /&gt;
    tm.put(&amp;quot;R S&amp;quot;, new Double(-19.08));&lt;br /&gt;
    Set&amp;lt;Map.Entry&amp;lt;String, Double&amp;gt;&amp;gt; set = tm.entrySet();&lt;br /&gt;
    for (Map.Entry&amp;lt;String, Double&amp;gt; me : set) {&lt;br /&gt;
      System.out.print(me.getKey() + &amp;quot;: &amp;quot;);&lt;br /&gt;
      System.out.println(me.getValue());&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println();&lt;br /&gt;
    double balance = tm.get(&amp;quot;A&amp;quot;);&lt;br /&gt;
    tm.put(&amp;quot;A&amp;quot;, balance + 1000);&lt;br /&gt;
    System.out.println(&amp;quot;A&amp;quot;s new balance: &amp;quot; + tm.get(&amp;quot;A&amp;quot;));&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Use a custom comparator. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
import java.util.TreeSet;&lt;br /&gt;
// A reverse comparator for strings.&lt;br /&gt;
class MyComp implements Comparator&amp;lt;String&amp;gt; {&lt;br /&gt;
  public int compare(String a, String b) {&lt;br /&gt;
    return b.rupareTo(a);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class CompDemo {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    TreeSet&amp;lt;String&amp;gt; ts = new TreeSet&amp;lt;String&amp;gt;(new MyComp());&lt;br /&gt;
    ts.add(&amp;quot;C&amp;quot;);&lt;br /&gt;
    ts.add(&amp;quot;A&amp;quot;);&lt;br /&gt;
    ts.add(&amp;quot;B&amp;quot;);&lt;br /&gt;
    ts.add(&amp;quot;E&amp;quot;);&lt;br /&gt;
    ts.add(&amp;quot;F&amp;quot;);&lt;br /&gt;
    ts.add(&amp;quot;D&amp;quot;);&lt;br /&gt;
    for (String element : ts)&lt;br /&gt;
      System.out.print(element + &amp;quot; &amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Writing Your own Comparator ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
import java.util.ruparator;&lt;br /&gt;
import java.util.Set;&lt;br /&gt;
import java.util.TreeSet;&lt;br /&gt;
class Employee implements Comparable {&lt;br /&gt;
  String department, name;&lt;br /&gt;
  public Employee(String department, String name) {&lt;br /&gt;
    this.department = department;&lt;br /&gt;
    this.name = name;&lt;br /&gt;
  }&lt;br /&gt;
  public String getDepartment() {&lt;br /&gt;
    return department;&lt;br /&gt;
  }&lt;br /&gt;
  public String getName() {&lt;br /&gt;
    return name;&lt;br /&gt;
  }&lt;br /&gt;
  public String toString() {&lt;br /&gt;
    return &amp;quot;[dept=&amp;quot; + department + &amp;quot;,name=&amp;quot; + name + &amp;quot;]&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  public int compareTo(Object obj) {&lt;br /&gt;
    Employee emp = (Employee) obj;&lt;br /&gt;
    int deptComp = department.rupareTo(emp.getDepartment());&lt;br /&gt;
    return ((deptComp == 0) ? name.rupareTo(emp.getName()) : deptComp);&lt;br /&gt;
  }&lt;br /&gt;
  public boolean equals(Object obj) {&lt;br /&gt;
    if (!(obj instanceof Employee)) {&lt;br /&gt;
      return false;&lt;br /&gt;
    }&lt;br /&gt;
    Employee emp = (Employee) obj;&lt;br /&gt;
    return department.equals(emp.getDepartment()) &amp;amp;&amp;amp; name.equals(emp.getName());&lt;br /&gt;
  }&lt;br /&gt;
  public int hashCode() {&lt;br /&gt;
    return 31 * department.hashCode() + name.hashCode();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class EmpComparator implements Comparator {&lt;br /&gt;
  public int compare(Object obj1, Object obj2) {&lt;br /&gt;
    Employee emp1 = (Employee)obj1;&lt;br /&gt;
    Employee emp2 = (Employee)obj2;&lt;br /&gt;
    int nameComp = emp1.getName().rupareTo(emp2.getName());&lt;br /&gt;
    return ((nameComp == 0) ?&lt;br /&gt;
      emp1.getDepartment().rupareTo(emp2.getDepartment()) :&lt;br /&gt;
      nameComp);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Employee emps[] = { &lt;br /&gt;
        new Employee(&amp;quot;Finance&amp;quot;, &amp;quot;A&amp;quot;), &lt;br /&gt;
        new Employee(&amp;quot;Finance&amp;quot;, &amp;quot;B&amp;quot;),&lt;br /&gt;
        new Employee(&amp;quot;Finance&amp;quot;, &amp;quot;C&amp;quot;), &lt;br /&gt;
        new Employee(&amp;quot;Engineering&amp;quot;, &amp;quot;D&amp;quot;),&lt;br /&gt;
        new Employee(&amp;quot;Engineering&amp;quot;, &amp;quot;E&amp;quot;), &lt;br /&gt;
        new Employee(&amp;quot;Engineering&amp;quot;, &amp;quot;F&amp;quot;),&lt;br /&gt;
        new Employee(&amp;quot;Sales&amp;quot;, &amp;quot;G&amp;quot;), &lt;br /&gt;
        new Employee(&amp;quot;Sales&amp;quot;, &amp;quot;H&amp;quot;), &lt;br /&gt;
        new Employee(&amp;quot;Support&amp;quot;, &amp;quot;I&amp;quot;), };&lt;br /&gt;
    Set set = new TreeSet(new EmpComparator());&lt;br /&gt;
    set.addAll(Arrays.asList(emps));&lt;br /&gt;
    System.out.println(set);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;[[dept=Finance,name=A], [dept=Finance,name=B], [dept=Finance,name=C], [dept=Engineering,name=D], [dept=Engineering,name=E], [dept=Engineering,name=F], [dept=Sales,name=G], [dept=Sales,name=H], [dept=Support,name=I]]&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>