Java列表排序代码分析(2)

分类: J2SE   出处:iocblog整理  更新时间:2009-02-26   添加到收藏  

  你是在对集合关键字进行排序,而不是实际的字符串。这不仅提供固定的不区分大小写的排序,而且它是跨语种的排序。换句话说,如果你对西班牙文和非西班牙文的混合词进行排序,词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)

上一页 [1] [2]


Tag: 排序



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。