?算法
本节中所描述的多态算法 (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 方法的第二种形式而达到你的目的。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器