知识大全 用java api进行sort

Posted 元素

篇首语:古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用java api进行sort相关的知识,希望对你有一定的参考价值。

  作者 SUNJ     本节中所描述的多态算法 (polymorphic algorithms)是由 JDK 所提供的可重复使用的功能性片段 它们均取自Collections类 并都采用静态方法(它的第一个参数是执行操作的 对象集)的形式 由Java平台所提供的绝大多数算法都操作于List对象 但有两个 (min 和 max) 操作于任意Collection对象 以下是关于算法的描述      排序(Sorting)       排序算法可为一个 List 重新排序 以使它的元素按照某种排序关系成上升式排序 有两种形式的操作被提供 简单形式的操作只采用一个 List 并按照它的元素的自然排序进行排序 如果你对自然排序的概念不熟悉 那么应该重新阅读 对象排序(Object Ordering)       sort 操作使用做了些优化的合并排序(merge sort) 算法 如果你不知道它的含义 而又很看重它的话 请阅读关于算法的任意一种教科书 这个算法的重要之处是     快速: 这个算法被保证运行在 n log(n) 时间内 并在已基本排序的列表上 它的速度实质上更快 经验表明 它的速度与高度优化的快速排序(quicksort)的速度差不多 Quicksort 一般被认为快于合并排序 但它不稳定 并不保证 n log(n)性能       稳定: 这就是说 它不为相等的元素重新排序 如果你为相同的列表做不同属性的重复排序 这一点对你来说是十分重要的 如果一个邮件程序的用户为它的邮件箱按日期排序 然后又按发件人排序 这个用户自然地期望某个特定发件人的现在相邻的消息列表将(仍然)按日期排序 这一点只有在第二个排序是稳定的时候才能得以保证       以下是 一个小程序 它可按词典(字母)顺序打印它的参数     import java util *;    public class Sort     public static void main(String args[])     List l = Arrays asList(args);    Collections sort(l);    System out println(l);              让我们运行这个程序     % java Sort i walk the line    [i line the walk]      演示这个程序只是为了表示我是毫无保留的 这个算法确实是象它们所显现的那样简单 我不想低估你的能力而演示更傻的例子       第二种形式的 sort除采用一个 List 外 还采用一个 Comparator 并且使用 Comparator 对元素进行排序 还记得在 Map 课程结束时的排列组的例子吗? 它以一个非特定的顺序打印出排列组 假设你要以相反的大小顺序打印它们 大的排列在前面 下列例子将告诉你如何借助 sort 方法的第二种形式而达到你的目的     回想一下 排序表是以 List 对象的形式作为一个 Map 中的值而被存储的 修改后的打印代码通过 Map 的 values视图进行迭代 将每一个通过最小尺寸测试的List放进List 之中 然后 代码使用一个期望 List 对象的 Comparator 为这个 List 排序 并实现反转大小排序 最终 代码通过现在已排序的 List 进行迭代 打印它的元素(排序组) 这个代码在 Perm 的 main 方法末尾替代了打印代码:     // Make a List of all permutation groups above size threshold    List winners = new ArrayList();    for (Iterator i = m values(erator(); i hasNext(); )     List l = (List) i next();    if (l size() = minGroupSize)    winners add(l);        // Sort permutation groups according to size    Collections sort(winners new Comparator()     public int pare(Object o Object o )     return ((List)o ) size() ((List)o ) size();        );    // Print permutation groups    for (Iterator i=erator(); i hasNext(); )     List l = (List) i next();    System out println(l size() + : + l);          用与 Map 课程中使用的相同的词典运行 这个程序 并使用相同的最小排序组尺寸( ) 会产生下列输出:     % java Perm dictionary txt      : [apers apres asper pares parse pears prase presa rapes     reaps spare spear]     : [alerts alters artels estral laster ratels salter slater     staler stelar talers]     : [least setal slate stale steal stela taels tales teals     tesla]     : [estrin inerts insert inters niters nitres sinter triens     trines]     : [capers crapes escarp pacers parsec recaps scrape secpar     spacer]     : [anestri antsier nastier ratines retains retinas retsina     stainer stearin]     : [palest palets pastel petals plates pleats septal staple     tepals]     : [carets cartes caster caters crates reacts recast traces]     : [ates east eats etas sate seat seta teas]     : [arles earls lares laser lears rales reals seral]     : [lapse leaps pales peals pleas salep sepal spale]     : [aspers parses passer prases repass spares sparse spears]     : [earings erasing gainers reagins regains reginas searing     seringa]     : [enters nester renest rentes resent tenser ternes treens]     : [peris piers pries prise ripes speir spier spire]    &# ;上一页 下一页&# ;    a    混排(Shuffling)      混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹 也就是说 基于随机源的输入重排该 List 这样的排列具有相同的可能性(假设随机源是公正的) 这个算法在实现一个碰运气的游戏中是非常有用的 例如 它可被用来混排代表一副牌的 Card 对象的一个 List 另外 在生成测试案例时 它也是十分有用的       这个操作有两种形式 第一种只采用一个 List 并使用默认随机源 第二种要求调用者提供一个 Random 对象作为随机源 这个算法的一些实际代码曾在 List 课程中被作为例子使用       常规数据操作(Routine Data Manipulation)      Collections 类为在 List 对象上的常规数据操作提供了三种算法 这些算法是十分简单明了的:      reverse: 反转在一个列表中的元素的顺序       fill: 用特定值覆蓋在一个 List 中的每一个元素 这个操作对初始化一个 List 是十分有用的       copy: 用两个参数 一个目标 List 和一个源 List 将源的元素拷贝到目标 并覆蓋它的内容 目标 List 至少与源一样长 如果它更长 则在目标 List 中的剩余元素不受影响       搜索(Searching)      binary search (二进制搜索)算法用二进制搜索算法在一个已排序的 List 中寻找特定元素 这个算法有两种形式 第一种采用一个 List 和一个要寻找的元素 ( 搜索键(search key) ) 这种形式假设 List 是按照它的元素的自然排序排列成上升顺序的 第二种形式除采用 List 外 还采用一个 Comparator 以及搜索键 并假设 List 是按照特定 Comparator 排列成上升顺序的 排序算法(描述见上) 可优先于 binarySearch 而被用来为List 排序       两种形式的返回值是相同的: 如果 List 包含搜索键 它的索引将被返回 如果不包括 则返回值为 ( (insertion point) ) 这里的 insertion point 被定义为一个点 从这个点该值将被插入到这个 List 中 大于该值的第一个元素的位置索引 或list size() 选用这个不可否认的难看的公式是为了保证如果且仅如果搜索键被发现 则返回值将等于 它基本上是一个将布尔逻辑 ( found ) 和整数 ( index ) 综合到单一的int返回值的大杂烩       下列惯用程序对 binarySearch 操作的两种形式均适用 它寻找特定搜索键 如果搜索键不出现 则将它插入到适当的位置:     int pos = Collections binarySearch(l key);    if (pos < 0)    l.add(-pos-1, key);      寻找极值(Finding Extreme Values)       min 和 max 算法分别返回包含在特定 Collection 中的最小和最大元素。tW.WINGwIt这两个操作都各有两种形式,简单形式只采用一个 Collection, 并按照元素的自然排序返回最小 (或最大) 元素;另一种形式除采用 Collection 之外,还采用一个 Comparator,并按照特定 Comparator返回最小(或最大)元素。       这些就是由Java 平台提供的作用于与 List 对象相对的任意 Collection 对象上的仅有算法,就象上面提到的 fill 算法一样,这些算法都是非常简单明了的,它们是Java平台为程序员特别提供的便利工具。        cha138/Article/program/Java/JSP/201311/19791

相关参考

知识大全 Java 3D图形API

Java3D图形API  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者TnkLuo  E_m

知识大全 Java反射机制中常用API

Java反射机制中常用API  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Class是Refl

知识大全 Java常用的加密 解密 数字签名等API

Java常用的加密解密数字签名等API  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  常用API

知识大全 比较JAVA的两个设备访问API

比较JAVA的两个设备访问API  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在最近的一次研讨

知识大全 java线程简介(其它线程API详细信息)

java线程简介(其它线程API详细信息)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  wai

知识大全 Java高级编程:使用打印服务API二(图)

Java高级编程:使用打印服务API二(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  选择

知识大全 Java Transaction API概述

JavaTransactionAPI概述  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   引言 

知识大全 Java Socket通信如何支持有关的API

JavaSocket通信如何支持有关的API  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Ja

知识大全 Java中利用Reflection API优化代码

Java中利用ReflectionAPI优化代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java SE 6 新特性: 编译器 API

JavaSE6新特性:编译器API  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  年底Sun公司