天天看點

黑馬程式員_日記46_TreeSet練習

 ——- android教育訓練、java教育訓練、期待與您交流! ———-

練習:

比較字元串長度,按字元串長度排序!

分析:

字元串本身是具備比較性的int compareTo(String str);

但是這裡要比較的是字元串長度,

是以需要用比較器讓集合具備比較性,

使用的是TreeSet的第二種排序方式

import java.util.*;
//1 建立類實作比較器
class MyComparator implements Comparator
{
    //覆寫compare(o1,o2)方法
    public int compare(Object o1,Object o2)
    {
        //強制轉換為String
        String str1 = (String)o1;
        String str2 = (String)o2;

        //比較字元串長度
        int num =new Integer(str1.length()).compareTo(new Integer(str2.length()));

        //當字元串長度相等,按字元串字典序排序
        if( num == )
            return str1.compareTo(str2);

        //否則按字元串長度排序
        return num;
    }
}

//主類
class TreeSetTest
{
    public static void main(String[] args)
    {
        //建立集合,傳入比較器
        TreeSet ts = new TreeSet(new MyComparator());

        //添加字元串對象
        ts.add("decsa");
        ts.add("ab");
        ts.add("aaad");
        ts.add("aaad");
        ts.add("aaab");
        ts.add("ebc");
        ts.add("fbcded");
        ts.add("c");

        //疊代取出
        for(Iterator it = ts.iterator(); it.hasNext(); )
            System.out.println(it.next());
    }
}
           

運作結果:

c

ab

ebc

aaab

aaad

decsa

fbcded

黑馬程式員_日記46_TreeSet練習

總結:

1 建類實作比較器接口,重寫compare方法

2 主要條件,判斷字元串長度關系

3 次要條件:判斷字元串字典序

注意:這裡也可以用内部類實作!

内部類實作的代碼如下:

//主類
class TreeSetTest
{
    public static void main(String[] args)
    {
        //建立集合,傳入比較器
        TreeSet ts = new TreeSet(new Comparator()
        {
            //覆寫compare(o1,o2)方法
            public int compare(Object o1,Object o2)
            {
                //強制轉換為String
                String str1 = (String)o1;
                String str2 = (String)o2;

                //比較字元串長度
                int num =new Integer(str1.length()).compareTo(new Integer(str2.length()));

                //當字元串長度相等,按字元串字典序排序
                if( num == )
                    return str1.compareTo(str2);

                //否則按字元串長度排序
                return num;
            }       
        }
        );

        //添加字元串對象
        ts.add("decsa");
        ts.add("ab");
        ts.add("aaad");
        ts.add("aaad");
        ts.add("aaab");
        ts.add("ebc");
        ts.add("fbcded");
        ts.add("c");

        //疊代取出
        for(Iterator it = ts.iterator(); it.hasNext(); )
            System.out.println(it.next());
    }
}
           

繼續閱讀