——- 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
總結:
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());
}
}