知识大全 列表排序代码分析

Posted 元素

篇首语:不要以为你的努力徒劳无功,权当做磨练你的意志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 列表排序代码分析相关的知识,希望对你有一定的参考价值。

Java编程技巧:列表排序代码分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在Java Collection Framework中定义的List实现有Vector ArrayList和LinkedList 这些集合提供了对对象组的索引访问 他们提供了元素的添加与删除支持 然而 它们并没有内置的元素排序支持     你能够使用java util Collections类中的sort()方法对List元素进行排序 你既可以给方法传递一个List对象 也可以传递一个List和一个Comparator 如果列表中的元素全都是相同类型的类 并且这个类实现了Comparable接口 你可以简单的调用Collections sort() 如果这个类没有实现Comparator 你也可以传递一个Comparator到方法sort()中 进行排序 如果你不想使用缺省的分类顺序进行排序 你同样可以传递一个Comparator到方法sort()中来进行排序 如果列表中的元素并不都是相同类型的类 你在进行排序的时候就不是这样幸运了 除非你编写一个专用的跨类的Comparator     排序的顺序怎么样呢?如果元素是String对象 却省的排序顺序是按照字符编码进行的 基本上是每个字符的ASCII/Unicode值 如果严格的限制在处理英文 却省的排序顺序通常是足够的 因为它首先排A Z 然后是小写字母a z 然而如果你处理非英文字 或者你只是想使用不同的排序顺序 这样Collections sort()就出现了第二种变化 例如 你想使用字符串的反序进行排序 为了实现这个功能 你可以在Collections类中通过reverseOrder()来获取一个反序Comparator 然后 你将反序Comparator传递给sort()方法 换句话说 你作如下工作     List list = ;  Comparator p = Collections reverseOrder();  Collections sort(list p);     如果列表包含项目 Man man Woman 和woman 排序好的列表将是Man Woman man woman 这里没有什么复杂的 需要注意的非常重要的一点是Collections sort()是进行原位排序 如果你需要保留原序 需要先对原集合进行复制 在排序 就像这样     List list = ;  List copyOfList = new ArrayList(list);  Collections sort(copyOfList);     这里 排好序的列表是 Man Woman man woman 但是原始列表(Man man Woman woman)被保留了     到目前为止 排序是区分大小写的 你如何进行不去分大小写的排序呢?一种实现方式是象这样实现Comparator:     public static class CaseInsensitiveComparator   implements Comparator   public int pare(Object element   Object element )   String lower =   element toString() toLowerCase();  String lower =   element toString() toLowerCase();  return pareTo(lower );           你确实不需要手工的创建这个类 而是 你可以是用以存在的Comparator CASE_INSENSIVTIVE_ORDER 它是在String类中定义的     这种实现方式有一点小小的问题 Sort()算法提供稳定的排序 并保持与原有序列相同的元素 这意味着一个包含两个元素 woman 和 Woman 的列表将有不同的排序 而这种不同是根据两个元素在列表中出现的先后次序决定的     语言的不同又会怎么样呢?java text包提供了Collector和CollectionKey类来进行区分语言的排序 这里是例子:    注意 如果你的文本是本地语言 而不是缺省语言 你需要传递一个本地语种给getInstance()方法 就象:     public static class CollatorComparator   implements Comparator   Collator collator = Collator getInstance();  public int pare(Object element   Object element )   CollationKey key = collator getCollationKey(  element toString());  CollationKey key = collator getCollationKey(  element toString());  return pareTo(key );         你是在对集合关键字进行排序 而不是实际的字符串 这不仅提供固定的不区分大小写的排序 而且它是跨语种的排序 换句话说 如果你对西班牙文和非西班牙文的混合词进行排序 词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 pare(Object element   Object element )   CollationKey key = collator getCollationKey(  element toString());  CollationKey key = collator getCollationKey(  element toString());  return pareTo(key );        public static class CaseInsensitiveComparator   implements Comparator   public int pare(Object element   Object element )   String lower = element toString()   toLowerCase();  String lower = element toString()   toLowerCase();  return pareTo(lower );        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 p = new CaseInsensitiveComparator();  Collections sort(list p);  out println( Case insensitive sorting: );  out println(list);  out println();    // Reset list  list = new ArrayList(Arrays asList(words));    // Perform collation sort  p = new CollatorComparator();  Collections sort(list p);  out println( Collator sorting: );  out println(list);  out println();    // Fill text area and display  textArea setText(buffer toString());  frame pack();  frame show();         如果你的主要问题是顺序访问 可能列表不是你的好的数据结构选择 只要你的集合没有重复 你可以在树(TreeSet)中保存你的元素(提供或不提供Comparator) 这样 元素将总是排序形式的 cha138/Article/program/Java/hx/201311/26066

相关参考

知识大全 下拉列表多级联动dropDownList示例代码

下拉列表多级联动dropDownList示例代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 javascript获取下拉列表框当中的文本值示例代码

需要将用户点击下拉列表当中某个选项后将其所选的内容保存起来下面与大家分享下如何使用js获取下拉列表框文本值由此需求的朋友可以参考下   近日碰到一个问题就是需要将用户点击下拉列表当中某个选项

知识大全 js函数排序的实例代码

这篇文章介绍了js函数排序的代码有需要的朋友可以参考一下 复制代码代码如下:varas=[];assort();//这个排序是按照字典排序//自定义按照数字排序functionsortByN

知识大全 jQuery对元素进行拖动并重新排序代码

jQuery对元素进行拖动并重新排序代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文章来给各

知识大全 JS实现随机化快速排序的实例代码

JS实现随机化快速排序的实例代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了JS实

知识大全 用代码展示一下合并排序算法

#include<iostreamh>voidMerge(intc[]intd[]intlintmintr)//合并c[l:m]和c[m+:r]到d[l:r]inti=lj=m+k=l;w

知识大全 查找 - 散列技术 - 散列表的概念

  散列方法不同于顺序查找二分查找二叉排序树及B树上的查找它不以关键字的比较为基本操作采用直接寻址技术在理想情况下无须任何比较就可以找到待查关键字查找的期望时间为O()  散列表的概念  散列表  设

知识大全 有限期作业排序和判断无向图的关节点算法设计源代码

  //判断无向图的关节点  #include  #include  #defineVnum  typedefstructarcnode    intadjvex;  structarcnode*ne

知识大全 PB打印机选择列表的分析与实现

PB打印机选择列表的分析与实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Word的打印对话

知识大全 基于JQuery的无限分级列表

基于JQuery的无限分级列表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这是代码大家看个意