java api之实现(上)

实现

实现是用来存储对象集 的实际数据对象,它实现了在前面的章节中所描述的 核心 对象集 接口 。以下章节将描述三种实现:

通用实现

通用实现是公共类,它提供核心对象集接口的主要实现。

包装器实现

包装器实现与其它实现(通常为通用实现)一起提供附加功能。

便利实现

便利实现是小型实现,通常可通过静态方法(static factory methods)获得,它可方便、高效地为特殊 对象集 (象 singleton sets)替代通用实现。

另外,根据JDK的abstract implementations,你也可以建立自己的实现。这在一个单独的课程中有所描述,因为它属于高级课程。它不是特别难,但相对来讲,需要它的人很少。

通用实现

如下表格对通用实现做了小结。该表突出显示了它们的正常命名样式:名称均属于 形式, 这里的 是由类实现的核心对象集接口, 而 表示了在该实现底层的数据结构。

    

  实现
Hash Table Resizable Array Balanced Tree Linked List
接口 Set HashSet   TreeSet  
List   ArrayList   LinkedList
Map HashMap   TreeMap  

JDK 1.2 提供了每个接口的两种实现 (Collection是个例外,它没有直接的实现,但可当作其它 对象集 接口的最小公分母). 在每一个接口中,其中一种实现明显的是主实现: 要使用的那个,其它东西是一样的。主实现是 HashSet, ArrayList 和 HashMap. 注意SortedSet和SortedMap接口在上表中没有列出。它们各自都有一个实现,这些实现(TreeSet 和 TreeMap) 被列在 Set 和 Map 栏里。

这些实现不仅具有一致的名称,而且还有一致的行为。它们都实现所有的包含在它们的接口中的选项操作(optional operations),都允许 null 元素、键和值。每一种实现都是不同步的。它们都具有快速失效迭代功能, 这可以在迭代过程中检测非法并发更改,并快速彻底地失效,而不是冒在今后不可预知的时间里发生任意不可确定行为的风险。所有的实现都是可序列化的(Serializable), 并都支持公共 clone 方法。

新实现不同步这一事实代表与过去的一个中断:Vector 和 Hashtable 在 JDK 1.2 以前的版本中是同步的。之所以采用新的做法是因为 对象集 经常以一种同步在其中没有益处的方式所使用。这样的使用包括单线程使用、只读使用以及作为一个较大的数据对象(它有它自己的同步)的一部分而使用。通常,API设计的惯例是不让用户为不必要的性能花钱。再者,不必要的同步在某中情况下可能会导致死锁。

如果你需要一个同步的 对象集, synchronization wrappers(同步包装器)(将在 下一节介绍)允许任意 对象集 转换为同步对象集。因此,对新的 对象集 实现来说,当它对旧的 对象集 是强制性的时候,同步是可选的。 作为一个经验法则,你应该考虑的是接口,而不是实现。这就是为什么在这一节中没有编程实例的原因。对大部分情况来讲,实现的选择仅影响性能。首选的风格(就象在 接口课程 中所提到的)是在创建一个 对象集 时选择一个实现,并立即将一个新的 对象集 赋值给相应接口类型的一个变量(或将该 对象集 传递给参数为此接口类型的方法)。这样,程序将不会依赖于在一个给定的实现中任意增加的方法, 并给程序员和维护人员以迅速改变实现的自由(如果有关性能允许这样做的话)。

下面将简要讨论通用实现。实现的性能的描述使用词汇如 constant, log, linear, n log(n) 和 quadratic等。这些词汇指执行操作的关于时间复杂性(time complexity)的渐进上限(asymptotic upper bound)。 所有这些可够你消化的了,不过如果你不理解,也没太大关系。有兴趣的话可以阅读任意一本算法教科书,那上面有关于这类内容的解释。有一件事是应该牢记的,那就是:这种性能的度量有它的局限性。有时名义上较慢的实现对于你所实际使用大小的对象集来说可能要快。如果有些怀疑,估量一下该性能。

时间: 2024-10-04 15:04:15

java api之实现(上)的相关文章

使用Java API处理WebSphere MQ大消息

WebSphere MQ 中处理大消息的方法 使用过 WebSphere MQ 的读者都知道,WebSphere MQ 对处理的单条消息的大小是有限制的,目前支持的最大消息是100M,而且,随着消息大小的增大,WebSphere MQ 处理的性能也会随之下降.从最佳实践来说,WebSphere MQ 传输大小为几K的消息其效率是最高的.那如何使 WebSphere MQ 能高效的处理大消息呢? WebSphere MQ 提供了处理大消息的两种方法:消息分片和消息分组.下面我们来看在使用 Java

DB2 NoSQL JSON 功能(三) 使用 Java API 编写应用程序

管理 JSON 文档 - 使用事务和不使用事务 概述 简介 DB2 JSON 是一个可用于 DB2 Linux, Unix and Windows 10.5 的 Technology Preview,提供了以下特性: 一个命令行 shell 用于管理和查询 JSON 数据 一个 Java API 用于应用程序开发 一个有线监听器用于接受和响应通过网络发送的请求. 图 1. DB2 JSON 组件 本文将介绍如何使用 Java 接口管理和查询 DB2 JSON 文档存储中的 JSON 文档.还将讨

用JAX-RPC构建RPC服务和客户机:使用Java API构建基于RPC的Web服务(一)

简介:远程过程调用(RPC)是基于 Simple Object Access Protocol(SOAP)或 Representational State Transfer(REST)的现代 Web 服务的前身.因为所有 Java 平台的 Web 服务 API 都构建 在从 RPC 引入的概念之上,所以要想用 Java 语言编写有效且高效的 Web 服务,理解 Java API for XML-Based RPC(JAX-RPC)几乎是必需的.本教程讲解如何获取.安装和配置 JAX-RPC 并构

使用IBM Rational ClearQuest Java API进行集成开发

通过 JNI 技术使用 ClearQuest Java API 实现与 Rational ClearQuest Test Manager(CQTM )系统的集成 简介:Rational ClearQuest 是一个缺陷和变更的管理系统,ClearQuest Test Manager (CQTM) 作为 一个模型运行在 ClearQuest V7 的顶层.其管理功能可覆盖测试的整个生命周期,包括测试计划.测试 编写.测试执行和测试报告.为了能够更好地使用CQTM提供的强大功能,自如地与其他应用系统

Java服务化系统线上应急和技术攻关,你必须掌握的Linux命令

上一篇文章<Java服务化系统线上应急和技术攻关,你必须拥有的那些应用层脚本和Java虚拟机命令>介绍了笔者在互联网公司里线上应急和技术攻关过程中积累的应用层脚本和Java虚拟机命令,这些脚本和命令在发现问题和定位问题的过程中起到关键作用,然而,经常会遇到一些深层次的问题,仅仅通过应用层和JVM虚拟机层的信息无法定位问题和解决问题,这时需要深入研究系统级的各种参数和信息,才能确定问题的根源原因,例如:网络超时.机器负载过高.JVM OOM.JVM和内核Bug等,这篇文章介绍那些重要的Linux

java实现FTP文件上传与文件下载_java

本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.net.TelnetInputStream; import sun.net.TelnetO

处理JSON的Java API :JSON的简介

原文链接  作者:Jitendra Kotamraju   译者:撒木 处理JSON的各种解析.生成.处理.转换和查询的JAVA API JSON (JavaScript Object Notation)是一种轻量级的.基于文本的.完全独立于语言的数据交换格式.它非常方便人们和机器的阅读和书写.JSON 有两种结构类型的表现方式:对象和数组.对象是名/值对的无序集合.数组是值(value)的有序集合.值的类型可以是字符串(在双引号中).数字(整数或浮点数).逻辑值(true或false).数组(

java如何获取网页上的数据,怎么处理?

问题描述 java如何获取网页上的数据,怎么处理? 毕业设计需要采集一些数据,比如招聘信息,创业信息.如何把这些数据整合到自己的页面上,我用java写的毕业设计救助各位大神支招,听说有jsoup,我试了可以解析出某网站,但是不知道怎么处理,如何展示到自己的页面上,需要放到数据库吗?怎么放? 解决方案 就是通过爬虫获取数据,然后进行展示就行了,httpClient发送请求 解决方案二: JAVA中伪造referer来获取网页数据java post数据到网页java 抓取 网页 数据 解决方案三:

HBase Java API详解

[本文转自HBase Java API详解] HBase是Hadoop的数据库,能够对大数据提供随机.实时读写访问.他是开源的,分布式的,多版本的,面向列的,存储模型. 在讲解的时候我首先给大家讲解一下HBase的整体结构,如下图: HBase Master是服务器负责管理所有的HRegion服务器,HBase Master并不存储HBase服务器的任何数据,HBase逻辑上的表可能会划分为多个HRegion,然后存储在HRegion Server群中,HBase Master Server中存