Collections API定制实现(一)

Hs_尊爵皇家

Hs_尊爵皇家

2016-02-19 14:37

下面,图老师小编带您去了解一下Collections API定制实现(一),生活就是不断的发现新事物,get新技能~
br>  许多程序员永远不需要实现他们自己的 对象集 类。用本课程上面所描述的实现,你可以做得非常好。然而,有一天,你可能发现你要编写一个你自己的核心 对象集 接口的实现。用由Java平台提供的 abstract implementations(抽象实现),这一点很轻易办到。但是,在我们要讨论如何编写一个实现之前,让我们先讨论一下为什么你要做这样一件事。
  
    编写你自己的实现的原因
  
    以下列举了几种你可能要实现的对象集,但这并不是全部。
  
    持久的(Persistent): 所有的内置 对象集 实现驻留在主存储器,而在VM退出时则消失。 假设你需要一个 对象集,它能在下一次VM启动时仍然存在。实现这样一个 对象集 的途径是在外部数据库之上建立一个虚饰板(veneer)。这样一个 对象集 可能会并发地接受多个VMs的访问,因为它驻留在VM之外。
  
    与特定应用相关的(Application-specific): 这是一个非常广阔的范畴。一个例子是包含实时遥感勘测数据的一个不可更改的 Map 。键可能代表位置,而值可能被从这些位置上的传感器上读取以响应 get 操作。
  
    高并发的(Highly Concurrent): 内置 对象集 未被设计为支持高并发性。同步包装器(和早期实现)锁定整个( entire) 对象集 (在每次它被访问时)。假设你正在建立一个服务器,并且需要一个可被许多线程并发访问的 Map 实现。简单的办法就是建立一个可分别锁定每一个存储段的哈希表,并答应多线程对该表的并发访问(假设它们正在分布于不同存储段中的键)。
  
    高性能、非凡目的(High-performance, Special-purpose): 有许多数据结构利用有限的用法,以提供可能比用通用实现更好的性能。例如,考虑一个 Set, 它的元素被限定在一个小的、固定的领域。这样的一个 Set 可被表示为一个 bit-vector, 它可提供令人眼花缭乱的快速性能以及低内存占用。 另一个例子涉及到包含长期相同元素值的 List。这样的列表(它经常出现在文本处理中)可能是游长编码的(run-length encoded): 运行可被表示为一个单一的对象,该对象包含重复的元素和连续重复的次数。这个例子很有趣,因为它交替使用了两个方面的性能:它要求比一个 ArrayList 小得多的空间,但更多的时间。
  
    高性能、通用的(High-performance, General-purpose): 设计 对象集 架构 的工程师试图为每一 涌诙继峁┳詈玫耐ㄓ檬迪? 但是有许多许多数据结构可能被使用,并且天天都在发明新的。也许你能带来什么更快的东西!
  
    增强功能(Enhanced functionality): 假设你需要一个 Map (或 Set) 实现,它即可提供不变时间存取又可提供插入顺序迭代。这种性能的结合可用哈希表获得,它的所有元素被进一步以插入顺序连接到一个双向链表中(doubly-linked)。另外,作为一种替代选择,假设你需要一种有效的 bag 实现(也称作 multiset)-- 一个可提供不变时间访问同时答应复制元素的 Collection。 那么,在HashMap上实现这样的一个Collection是非常简单明了的。
  进入讨论组讨论。
    便利性(Convenience): 你可能需要由Java平台提供的那些实现之外的附加便利实现。例如,你可能经常需要一个代表单独键-值映射的不变 Map 对象、或代表一个连续的整数局域的 List 对象或者其他什么东西。
  
  !-- frame contents -- !-- /frame contents --  适配器(Adapter): 假设你正在使用某些有着自己非凡的collectioon API 的早期API。你可以编写一个适配器(adapter) 实现,它使那些 对象集 可以在 Java Collections Framework 上进行操作。一个适配器实现是一个薄的虚饰板,它可以包装一个类型的对象,并使其表现得象另一个类型的对象。这是通过将后一类型的操作转化到前一类型的结果。
   如何编写一个定制实现
   借助Java平台上的抽象实现(abstract implementations) 来编写定制实现出奇地简单。抽象实现是 核心 对象集 接口 的骨干实现,它明显地是为便于定制实现的编写而设计的。我们以一个例子开始,以下是一个 Arrays.asList的实现:
  
   public static List asList(Object[] a) {
   return new ArrayList(a);
   }
  
   private static class ArrayList extends AbstractList
   implements java.io.Serializable
   {
   private Object[] a;
  
展开更多 50%)
分享

猜你喜欢

Collections API定制实现(一)

编程语言 网络编程
Collections API定制实现(一)

java api之实现(下)

编程语言 网络编程
java api之实现(下)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用API函数实现串行通讯

编程语言 网络编程
用API函数实现串行通讯

VB中用API实现文件拖放

vb
VB中用API实现文件拖放

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在VB中用API实现多媒体

编程语言 网络编程
在VB中用API实现多媒体

Windows Sockets API实现网络异步通讯

C语言教程 C语言函数
Windows Sockets API实现网络异步通讯

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Linux setitimer函数的操作技巧

Linux setitimer函数的操作技巧

JQuery SELECT单选模拟jQuery.select.js

JQuery SELECT单选模拟jQuery.select.js
下拉加载更多内容 ↓