深入理解Collections API

一个 List l 可能被做如下排序:

Collections.sort(l);

如果这个 list 由 String 元素所组成, 那么它将按词典排序法(按字母顺序)进行排序; 如果它是由 Date 元素所组成, 那么它将按年代顺序来排序。Java 怎么会知道该怎么做呢? 这一定是个魔术! 其实不然。实际上, String 和 Date 均实现了Comparable接口。Comparable 接口为一个类提供一个自然排序( natural ordering), 它允许那个类的对象被自动排序。下表列出了实现了Comparable 的JDK类:

类 自然排序

Byte 带符号的数字排序

Character 不带符号的数字排序

Long 带符号的数字排序

Integer 带符号的数字排序

Short 带符号的数字排序

Double 带符号的数字排序

Float 带符号的数字排序

BigInteger 带符号的数字排序

BigDecimal 带符号的数字排序

File 依赖系统的按路径名字母顺序排序

String 按字母顺序排序

Date 按年代顺序排序

CollationKey 特定字符集按字母顺序排序

如果你要为一个其元素没有实现 Comparable的列表排序,Collections.sort(list) 将扔出一个 ClassCastException。类似的,如果你要为一个其元素没有作相互比较的列表进行排序, Collections.sort 将扔出一个 ClassCastException. 能够被相互比较的元素被称作 mutually comparable(可相互比较的)。虽然不同类型的元素有可能被相互比较,但以上列出的任何JDK类型都不允许在类之间的比较 (inter-class comparison)。

如果你只是要为可比较的元素的列表进行排序,或为它们创建排序的对象集, 则这就是你实际需要了解的全部有关 Comparable 接口的内容。如果你要实现你自己的 Comparable 类型,则下一节将会引起你的兴趣。

编写你自己的 Comparable 类型

Comparable 接口由一个单一的方法构成:

public interface Comparable {

public int compareTo(Object o);

}

时间: 2016-12-13

深入理解Collections API的相关文章

关于Java Collections API您不知道的5件事,第1部分

定制和扩展 Java Collections 对于很多 Java 开发人员来说,Java Collections API 是标准 Java 数组及其所有缺点的一个非常需要的替代品.将 Collections 主 要与 ArrayList 联系到一起本身没有错,但是对于那些有探索精神的人来说,这只是 Collections 的冰山一角. 虽然 Map(以及它的常用实现 HashMap)非常适合名-值对或键-值对,但是没有理由让自己局限于这些熟悉的工具.可以使用适当的 API,甚至适当的 Colle

系统理解Win32 API和MFC(下)

二.MFC的概念模型 前面我们研究了WIN32 API的"领域模型",对它有较全面的认识.下面,对MFC概念模型的研究,我们把重点放在对app framework的研究上. app framework中的message响应/传递机制是最重要的.而Hook机制和Message响应/传递机制是密切相关的,后者以前者为基础. 1. Hook机制 也许有些程序员只知道hook机制可以编写很"牛"的应用,孰不知MFC本身也是依靠hook机制的. 从图中看到,每个hook拥有一

系统理解Win32 API和MFC(上)

Win32 API是微软的操作系统Windows提供给开发人员的编程接口,它决定了我们开发的Windows应用程序的能力.MFC是微软为开发人员提供的类库,在某种意义上是对Win32 API的封装.本文试图从全局角度对Win32 API和MFC进行理解──给出二者的概念模型. 本文使用UML描述概念模型.Win32 API本不是面向对象的,我用面向对象的观点去理解它,无非是想表达其全局. 本文参考了MSDN.相关书籍和网上的一些资料,在此一并感谢. 一.Win32 API的概念模型 Win32

关于Java Collections API您不知道的5件事,第2部分

注意可变对象 java.util 中的 Collections 类旨在通过取代数组提高 Java 性能.如您在 第 1 部分 中了解到的,它们也是多变的,能够以各种方 式定制和扩展,帮助实现优质.简洁的代码. Collections 非常强大,但是很多变:使用它们要小心,滥用它们会带来风险. 1. List 不同于数组 Java 开发人员常常错误地认为 ArrayList 就是 Java 数组的替代品.Collections 由数组支持,在集合内随机查找内容时性能较好. 与数组一样,集合使用整序

小信子中文理解 API 云端服务接入指南

小信子中文理解 API 云端服务平台最大的特色是采用"汉字基因"中文人工智能理解核心,提供单一界面 RESTful API 对外接口(整合了天气.时间.交通.文化.饮食娱乐.理财.解问.聊天.健康.新闻百科.四则运算.单位换算.外语翻译 ... 等多个应用场景),为智慧家居.智慧陪伴.智慧助手.智慧社区服务.智慧客服.3D 虚拟智慧导览等提供全方位中文理解核心技术服务. 透过 API 接口,开发者可快速开发出以语音或文本互动的各种智慧机器人应用,可选择自建问答知识库服务方案,满足不同产

独家丨慧川智能发布首款视频理解API,要让AI真正取代“剪片子”的人类?

慧川智能CEO:康洪文 在今日由中国计算机学会(CCF)主办,雷锋网和香港中文大学(深圳)承办第二届CCF-GAIR全球人工智能与机器人峰会的AI+专场上,慧川智能CEO康洪文在给大家带来"AI(爱)让视频更简单"的主题演讲的同时,也重磅首发了一款新的视频内容理解的API产品:智影·视频理解API. 据康洪文介绍,这款API可利用深度学习技术,对一段完整输入的视频中所涵盖的图像和视频流进行模式识别.拆解和结构化,从而对视频内容实现精确到每一帧的处理. 康洪文向雷锋网(公众号:雷锋网)表

《深入理解Scala》——第1章,第1.2节当函数式编程遇见面向对象

1.2 当函数式编程遇见面向对象 深入理解Scala 函数式编程和面向对象编程是软件开发的两种不同途径.函数式编程并非什么新概念,在现代开发者的开发工具箱里也绝非是什么天外来客.我们将通过Java生态圈里的例子来展示这一点,主要来看Spring Application framework和Google Collections库.这两个库都在Java的面向对象基础上融合了函数式的概念,而如果我们把它们翻译成Scala,则会优雅得多.在深入之前,我们需要先理解面向对象编程和函数式编程这两个术语的含义

[ASP.NET MVC 小牛之路]18 - Web API

原文:[ASP.NET MVC 小牛之路]18 - Web API Web API 是ASP.NET平台新加的一个特性,它可以简单快速地创建Web服务为HTTP客户端提供API.Web API 使用的基础库是和一般的MVC框架一样的,但Web API并不是MVC框架的一部分,微软把Web API相关的类从 System.Web.Mvc 命名空间下提取了出来放在 System.Web.Http 命名空间下.这种理念是把 Web API 作为ASP.NET 平台的核心之一,以使Web API能使用在

《深入理解Scala》——第1章,第1.3节静态类型和表达力

1.3 静态类型和表达力 深入理解Scala 开发人员中有一个误解,认为静态类型必然导致冗长的代码.之所以如此是因为很多继承自C的语言强制要求程序员必须在代码中多处明确地指定类型.随着软件开发技术和编译器理论的发展,情况已经改变.Scala利用了其中一些技术进步来减少样板(boilerplate)代码,保持代码简洁. Scala做了以下几个简单的设计决策,以提高代码表达力. • 把类型标注(type annotation)换到变量右边. • 类型推断. • 可扩展的语法. • 用户自定义的隐式转