Java列表排序代码分析(2)
你是在对集合关键字进行排序,而不是实际的字符串。这不仅提供固定的不区分大小写的排序,而且它是跨语种的排序。换句话说,如果你对西班牙文和非西班牙文的混合词进行排序,词ma?ana (tomorrow)将排在mantra的前面。如果你不使用collector,ma?ana将排在mantra的后面。
下面这个程序对一个列表进行不同类型的排序(缺省的、区分大小写的、区分语种的):
import java.awt.borderlayout;
import java.awt.container;
import java.io.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
public class sortit {
public static class collatorcomparator
implements comparator {
collator collator = collator.getinstance();
public int compare(object element1,
object element2) {(来源www.iocblog.net)
collationkey key1 = collator.getcollationkey(
element1.tostring());
collationkey key2 = collator.getcollationkey(
element2.tostring());
return key1.compareto(key2);
}
}
public static class caseinsensitivecomparator
implements comparator {
public int compare(object element1,
object element2) {
string lower1 = element1.tostring().
tolowercase();
string lower2 = element2.tostring().
tolowercase();
return lower1.compareto(lower2);
}
}
public static void main(string args[]) {
string words[] =
{"man", "man", "woman", "woman",
"manana", "manana", "ma?ana", "ma?ana",
"mantra", "mantra", "mantel", "mantel"
};
// create frame to display sortings
jframe frame = new jframe("sorting");
frame.setdefaultcloseoperation(
jframe.exit_on_close);
container contentpane = frame.getcontentpane();
jtextarea textarea = new jtextarea();
jscrollpane pane = new jscrollpane(textarea);
contentpane.add(pane, borderlayout.center);
// create buffer for output
stringwriter buffer = new stringwriter();
printwriter out = new printwriter(buffer);
// create initial list to sort
list list = new arraylist(arrays.aslist(words));
out.println("original list:");
out.println(list);
out.println();
// perform default sort
collections.sort(list);
out.println("default sorting:");
out.println(list);
out.println();
// reset list
list = new arraylist(arrays.aslist(words));
// perform case insensitive sort
comparator comp = new caseinsensitivecomparator();
collections.sort(list, comp);
out.println("case insensitive sorting:");
out.println(list);
out.println();
// reset list
list = new arraylist(arrays.aslist(words));
// perform collation sort
comp = new collatorcomparator();
collections.sort(list, comp);
out.println("collator sorting:");
out.println(list);
out.println();
// fill text area and display
textarea.settext(buffer.tostring());
frame.pack();
frame.show();
}
}
如果你的主要问题是顺序访问,可能列表不是你的好的数据结构选择。只要你的集合没有重复,你可以在树(treeset)中保存你的元素(提供或不提供comparator)。这样,元素将总是排序形式的。(来源www.iocblog.net)
Tag: 排序
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。