HPPC(高性能的原始集合)库专注高性能和高存储效率优化,提供了经典Java集合的高性能实现,支持所有原生类似,包括List、Set 和Map等。

为什么要使用HPPC

  • Java集合包在许多方面是完美的,它不能用于JDK1.5中开始引入的原始类型和自动装箱,这减少了运行时的效率(增加内存使用以及垃圾收集器的开销)
  • 这个库和Java集合类以及其它集合类有着不同的设计目标,例如每个类的内部都是公开的,可以供程序员按照自己的愿望改进。

为什么不使用其它的原始集合库

  • 有几个通过原始类来实现集合的项目,例如: fastutil、PCJ、GNU Trove、Apache Mahout(COLT集合移植)、Apache Primitive Collections。
  • 其中有些是LGPL-ED类型的(很多商业公司往往不惜一切代价避免的许可证类型)。上面说到的一些项目不在保留或不再完整;也有一种写紧密封装的代码(内部私有),实现标准的Java API并且争取快速的恢复错误的趋势。虽然这些都是良好的编程习惯,但并不总是可行的(在许多密集型计算中,应用访问集合类内部是很频繁的)。HPPC有一些稍微不同的目标。如果你需要Java集合符合要求,那么可以尝试fastutil,它非常的棒。

HPPC的设想和目标

设想

  • 程序员知道自己在做什么,并可能希望直接访问特定集合的类的内部存储(例如,不使用预定义的迭代器)
  • 绝大多数情况下程序使用单线程访问。例如,有一个在并发修改的重复验证的小点。
  • 使用原始集合的程序在开发期间使用单元测试和回归测试,所以他们在生产系统中的行为不会被严格验证(我们可以假设使用集合类的代码不会违反给出的一组断言)

从上面这些假设建立以下设计思想:

  • 在HPPC中数据类型尽可能简单,对终端代码里的任何优化公开其内部存储。
  • 参数验证和状态有效性校验可以使用断言。这意味着约束仅仅能够检查请求是否在运行是发出(java1.4版本以上),当程序被测试和验证时,它运行从约束中检查不会有额外的开销。
  • 我们试图避免复杂的接口层次,尽管为了更明确而定义了特定的接口。程序员在设计时应该还是会选择合适的数据结构,并且应该知道自己在做什么。
  • HPPC为大多数普通任务例如,过滤,迭代以及合并提供了工具,但是这些工具通常比实现低层次的对数据存储的直接访问更昂贵(如果需要的话可以使用)。
  • 对数据序列化没有特别的支持。
  • 这个实现不是线程安全的,并且不会试图提供快速的并发问题检测。

设计与实现

  • 我们希望HPPC类模板可以实现为普通的Java类,以便典型的编程工具可用于开发,测试等。
  • 我们希望HPPC类模板可被用作通常的集合类(适用于封装的数值类型或其它对象类型),但同时我们希望特殊的类能够自动转化为一般类型(为了限制内存消耗并且提高效率由于JIT优化)

接口以及与Java集合API的关系

  • HPPC并不是严格按照Java集合API来制定的,尽管为了更便捷地使用我们的确尽量让HPPC API接近Java集合API。在很大程度上HPPC中缺少一个特别的是“视图”部分(子列表或具有键或值的集合)。特定的类提供了这些视图(例如ObjectObjectHashMap),但是对大部分来说,提供特殊的方法以接收范围和闭合的过滤器。如果表现仍不尽人意,每一个类的内部可用于直接操作。Java集合类和HPPC类之间的基本关系见下表。

  • 相应类型的方法级的API也相似,但差异也是存在的(参考相应类的Java文档)。

下面让我们来看看它的实现方法,HPPC的示例很少,这里引用的是官方示例。

1.新建一个Java项目,记得下载并引入HPPC的jar包以及JUnit库。

2.将示例中的Helpers和HppcExample_001_IteratingOverLists类复制到相应的包下

3.运行单元测试,可以看到由HPPC实现的List类速度的确快了不少,至于其它的,大家也可以一一试验。

HPPC(高性能的原始集合)库专注高性能和高存储效率优化,提供了经典Java集合的高性能实现,支持所有原生类似,包括List、Set 和Map等。

为什么要使用HPPC

  • Java集合包在许多方面是完美的,它不能用于JDK1.5中开始引入的原始类型和自动装箱,这减少了运行时的效率(增加内存使用以及垃圾收集器的开销)
  • 这个库和Java集合类以及其它集合类有着不同的设计目标,例如每个类的内部都是公开的,可以供程序员按照自己的愿望改进。

为什么不使用其它的原始集合库

  • 有几个通过原始类来实现集合的项目,例如: fastutil、PCJ、GNU Trove、Apache Mahout(COLT集合移植)、Apache Primitive Collections。
  • 其中有些是LGPL-ED类型的(很多商业公司往往不惜一切代价避免的许可证类型)。上面说到的一些项目不在保留或不再完整;也有一种写紧密封装的代码(内部私有),实现标准的Java API并且争取快速的恢复错误的趋势。虽然这些都是良好的编程习惯,但并不总是可行的(在许多密集型计算中,应用访问集合类内部是很频繁的)。HPPC有一些稍微不同的目标。如果你需要Java集合符合要求,那么可以尝试fastutil,它非常的棒。

HPPC的设想和目标

设想

  • 程序员知道自己在做什么,并可能希望直接访问特定集合的类的内部存储(例如,不使用预定义的迭代器)
  • 绝大多数情况下程序使用单线程访问。例如,有一个在并发修改的重复验证的小点。
  • 使用原始集合的程序在开发期间使用单元测试和回归测试,所以他们在生产系统中的行为不会被严格验证(我们可以假设使用集合类的代码不会违反给出的一组断言)

从上面这些假设建立以下设计思想:

  • 在HPPC中数据类型尽可能简单,对终端代码里的任何优化公开其内部存储。
  • 参数验证和状态有效性校验可以使用断言。这意味着约束仅仅能够检查请求是否在运行是发出(java1.4版本以上),当程序被测试和验证时,它运行从约束中检查不会有额外的开销。
  • 我们试图避免复杂的接口层次,尽管为了更明确而定义了特定的接口。程序员在设计时应该还是会选择合适的数据结构,并且应该知道自己在做什么。
  • HPPC为大多数普通任务例如,过滤,迭代以及合并提供了工具,但是这些工具通常比实现低层次的对数据存储的直接访问更昂贵(如果需要的话可以使用)。
  • 对数据序列化没有特别的支持。
  • 这个实现不是线程安全的,并且不会试图提供快速的并发问题检测。

设计与实现

  • 我们希望HPPC类模板可以实现为普通的Java类,以便典型的编程工具可用于开发,测试等。
  • 我们希望HPPC类模板可被用作通常的集合类(适用于封装的数值类型或其它对象类型),但同时我们希望特殊的类能够自动转化为一般类型(为了限制内存消耗并且提高效率由于JIT优化)

接口以及与Java集合API的关系

  • HPPC并不是严格按照Java集合API来制定的,尽管为了更便捷地使用我们的确尽量让HPPC API接近Java集合API。在很大程度上HPPC中缺少一个特别的是“视图”部分(子列表或具有键或值的集合)。特定的类提供了这些视图(例如ObjectObjectHashMap),但是对大部分来说,提供特殊的方法以接收范围和闭合的过滤器。如果表现仍不尽人意,每一个类的内部可用于直接操作。Java集合类和HPPC类之间的基本关系见下表。

  • 相应类型的方法级的API也相似,但差异也是存在的(参考相应类的Java文档)。

下面让我们来看看它的实现方法,HPPC的示例很少,这里引用的是官方示例。

1.新建一个Java项目,记得下载并引入HPPC的jar包以及JUnit库。

2.将示例中的Helpers和HppcExample_001_IteratingOverLists类复制到相应的包下

3.运行单元测试,可以看到由HPPC实现的List类速度的确快了不少,至于其它的,大家也可以一一试验。

高效的HPPC java库相关推荐

  1. 10大最高效的Java库盘点

    1. Java 标准库 不用怀疑,我说的就是Java标准库,很多人都低估了或者没有完全了解Java标准库,并且不知道如何在编程的时候使用它,有些人甚至都不用它,下面说一些Java标准库的简要说明 ●  ...

  2. 2018年不能错过的 14 个 Java 库

    转载自 2018年不能错过的 14 个 Java 库 下面是整理给你的 2018 年不应该错过的 14 个 Java 库包清单,多多少少大家应该都接触过一些,如果还没听过那就OUT了. Guice G ...

  3. Java:5大最佳Java库

    Java是一种面向对象的编程语言,受到全世界数百万程序员的欢迎和使用.让我们重点介绍一下最佳Java库,这些Java库包含扩展Java应用程序功能的包.与传统的Java库相比,它们的受欢迎程度激增. ...

  4. 2016年度最受欢迎的100个 Java 库

    [编者按]本文作者为 Henn Idan,主要介绍基于 GitHub 中的数据分析,得出的2016年度最受欢迎的100个 Java 库.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 谁拔得 ...

  5. Java黑皮书课后题第10章:**10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2)

    **10.23(实现String类)在Java库中提供了String类,给出你自己对下面方法的实现(将新类命名为MyString2) 题目 简短的吐槽 代码:这里将类名改用Test23_MyStrin ...

  6. 在分析了47,251个依赖关系之后,2016年排名前100的Java库

    谁在上面,谁在后面? 我们分析了Github上的47,251个依赖关系,并抽取了前100个Java库 长周末我们最喜欢的消遣是浏览Github并搜索流行的Java库. 我们决定与您分享乐趣和信息. 我 ...

  7. eclipse 中文_谁说API必须用英文?中文API的Java库可以有!

    是不是看惯了文档里的英文接口(API),也在 IDE 里看惯了自动补全里的英文接口? 现今的绝大多数 API 的确是英文命名没错,但绝非不能或者不应该实现和发布中文 API 的库. 这里用一个简单的汉 ...

  8. 好用java库(二) : lambdaj (集合操作)

    接着介绍另外一个好用的java库. 记得之前做过一个web services,业务逻辑是很简单,可是代码写得多又长,因为基本上都是在对ArrayList结果进行各种筛选,排序,聚合等操作.大家都有这样 ...

  9. scala调用java库_从scala调用java时的java.lang.IllegalAccessError – solutions / workarounds?...

    我正在使用 java线性代数库(ojalgo 32.0)进行scala项目,我遇到了一个 奇怪的问题.我使用的每种ojalgo方法都很好(例如矩阵 和逐元素乘法,逆矩阵和随机矩阵 除了用于获得矩阵尺寸 ...

最新文章

  1. iPhone 13注定便宜不了,台积电已提前背锅
  2. SQL SERVER中求上月、本月和下月的第一天和最后一天[转]
  3. 树莓派AI视觉云台——6、Linux常用命令及vim编辑器的使用
  4. 很强大的一个jquery分页插件
  5. 支架预压弹性变形值计算_现浇连续梁桥支架搭设及预压施工技术控制
  6. 上海服务器虚拟机系统,服务器虚拟机系统重装系统
  7. Enterprise Library引起的A reference to 'System.Design' could not be added
  8. 计算机考研复试之软件工程
  9. 游戏素材网站推荐!!!
  10. HTTPClient模拟登陆开心网001
  11. ElasticSearch六 ElasticSearch扩展之FileBeat、Logstash
  12. android 自定义星级评分控件
  13. php怎么读取txt文件_PHP读取文件内容的五种方式
  14. cisco将计算机配置为vlan2,思科路由器如何配置VLAN的IP
  15. 如何在ios app 局域网内搜索到设备
  16. 智能电视是否是一台计算机,误区四 智能电视代替电脑使用_平板电视_液晶电视评测-中关村在线...
  17. Linux系统中安装软件的几种方式
  18. python中占位符的使用
  19. Python_Python遍历列表的四种方法
  20. 使用Android Studio搭建Android源码查看工具

热门文章

  1. 淘宝电影成全国最大在线选座平台 覆盖702家影院
  2. 2021互联网大厂职级对应薪资一览表。
  3. 广州市白云区2021-2022学年九年级第一学期期末考试英语试题
  4. 广州市越秀区2021-2022学年九年级第一学期期末考试英语试题
  5. 【诗经】之《秦风·无衣》
  6. ubuntu16.04 LTS安装ROS Kinetic详细步骤(包含出现的错误)
  7. Android_基于g-sensor的坐下动作的的识别
  8. 构建伟大的思想体系的重要性
  9. Vim q-quit - 用 q 键关闭窗口
  10. 基于Python实现的钢筋数量识别