简单的基准测试:不可变集合VS持久集合

通常,您需要向集合中添加新元素。

因为您是一个优秀而谨慎的开发人员,所以您希望尽可能保持不变。 因此,向不可变集合中添加新元素将意味着您必须创建一个新的不可变集合,其中包含原始集合的所有元素以及新元素。

您可以使用guava库以及最近的pCollection库来创建不可变的集合。

在下面的示例中,我们将构建2个不可变列表,其中一个来自guava不可变,另一个来自pCollection持久。

它们最初都将包含10.000整数。

我们将为每种类型创建20.000个不可变列表,我们将测量花费的时间。

package com.marco.pcollections;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.pcollections.PCollection;
import org.pcollections.TreePVector;import com.google.common.collect.ImmutableList;public class PcollectionVSImmutable {public static void main(String[] args) {Map<Integer, ImmutableList<Object>> allImmutable = new HashMap<Integer, ImmutableList<Object>>();Map<Integer, PCollection<Integer>> allPersistent = new HashMap<Integer, PCollection<Integer>>();List<Integer> bigList = new ArrayList<Integer>();for (int i = 0; i < 10000; i++) {bigList.add(new Integer(i));}ImmutableList<Integer> immutable = ImmutableList.copyOf(bigList);PCollection<Integer> persistent = TreePVector.from(bigList);long start = System.currentTimeMillis();for (int i = 10000; i < 30000; i++) {allPersistent.put(new Integer(i), persistent.plus(new Integer(i)));}System.out.println("creating 20.000 pCollections takes : " + (System.currentTimeMillis() - start) + "ms");start = System.currentTimeMillis();for (int i = 10000; i < 30000; i++) {allImmutable.put(new Integer(i), ImmutableList.builder().addAll(immutable).add(new Integer(i)).build());}System.out.println("creating 20.000 Guava ImmutableList takes : " + (System.currentTimeMillis() - start) + "ms");System.out.println("All immutable size : " + allImmutable.size() + " allPersistent size : " + allPersistent.size());}
}

输出:

creating 20.000 pCollections takes : 29ms
creating 20.000 Guava ImmutableList takes : 18347ms
All immutable size : 20000 allPersistent size : 20000

翻译自: https://www.javacodegeeks.com/2015/05/simple-benchmarking-immutable-collections-vs-persistent-collections.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java list 合并去重_java 怎么把多个list 合并成一个去掉重复的

展开全部示例代码636f707962616964757a686964616f31333361313838:public static void main(String[] args){List list1 new ArrayList();list1.add(1);list1.add(2);list1.add(3);list1.add(4);List list2 new ArrayList();list2.add(1);list2.add(4);list2.add(7);list2.add…

UITextField实现左侧空出一定的边距

就是通过uitextfield的leftview来实现的&#xff0c;同时要设置leftviewmode。 如果设置左右边距&#xff0c;需要再加上rightView功能 -(void)setTextFieldLeftPadding:(UITextField *)textField forWidth:(CGFloat)leftWidth {CGRect frame textField.frame;frame.size.widt…

java软件工程师 英文简历_2017java程序员英文简历范文

2017java程序员英文简历范文简历写完以后&#xff0c;再检查一下你的简历是否回答了以下问题&#xff1a;它是否清楚并能够让雇主尽快知道你的能力?是否写清了你的能力?是否写清了你要求这份工作的.基础?有东西可删除吗?尽力完善你的简历直到最好。2017java程序员英文简历范…

写给java web一年左右工作经验的人

摘要 大学就开始学习web&#xff0c;磕磕绊绊一路走过来&#xff0c;当中得到过开源社区很多的帮助&#xff0c;总结了这些年来的技术积累&#xff0c;回馈给开源社区。 ps&#xff1a;图片都是从网上盗。。。感谢原作者。 ps&#xff1a;文字千真万确都是我自己写的。 在此&am…

FlexyPool如何支持Dropwizard Metrics包重命名

介绍 FlexyPool严重依赖Dropwizard &#xff08;以前是Codahale&#xff09;度量标准来监视连接池的使用情况 。 集成到Dropwizard中后&#xff0c;程序包名称必然会被重命名 。 因此&#xff0c;4.0.0版本将使用io.dropwizard.metrics软件包名称代替com.codahale.metrics 。 …

java网络编程与分布式计算_Java网络编程与分布式计算

基本信息书名:Java网络编程与分布式计算定价&#xff1a;38.00元作者:[澳]赖利出版社&#xff1a;机械工业出版社出版日期&#xff1a;2003-03-00ISBN&#xff1a;9787111115786字数&#xff1a;页码&#xff1a;版次&#xff1a;装帧&#xff1a;开本&#xff1a;编辑推荐内容…

java ref 应用类型_Java四种引用类型

Java四种引用类型在java中&#xff0c;类型就分为两种&#xff0c;基本类型和引用类型或自定义类型。引用类型又分为四种&#xff1a;强引用 StrongReference软引用 SoftReference若引用 WeakReference虚引用 PhantomReference划分这些类型的目的是&#xff1a;是为了更灵活的管…

嵌入式Linux学习笔记

一 嵌入式系统定义&#xff1a; 应用于特定环境的硬件体系。 二 两样非常重要的能力&#xff1a; 1. 掌握各种新概念的能力 2. 调试的能力( 包括软件, 硬件 ) 三 需要的基础知识&#xff1a; 1. 操作系统理论基础 2. 数据结构 3. C,C编程语言 4. 汇编语言 5. Linux基…

java string 内存占用_JVM系列之:String,数组和集合类的内存占用大小

简介之前的文章中&#xff0c;我们使用JOL工具简单的分析过String,数组和集合类的内存占用情况&#xff0c;这里再做一次更详细的分析和介绍&#xff0c;希望大家后面再遇到OOM问题的时候不再抱头痛哭&#xff0c;而是可以有章可循&#xff0c;开始吧。数组先看下JOL的代码和输…

maven osgi_OSGi将Maven与Equinox结合使用

maven osgi很长时间以来&#xff0c;我一直在努力理解OSGi的真正含义。 它已经存在很长时间了&#xff0c;但是没有多少人意识到这一点。 它被炒作是一种非常复杂的技术。 这是我为所有Java开发人员简化的尝试。 简而言之&#xff0c; OSGi是一组规范&#xff0c;这些规范支持模…

java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu

这段时间一直有人问如何在Redis中缓存Java中的List 集合数据&#xff0c;其实很简单&#xff0c;常用的方式有两种&#xff1a;1. 利用序列化&#xff0c;把对象序列化成二进制格式&#xff0c;Redis 提供了 相关API方法存储二进制&#xff0c;取数据时再反序列化回来&#xff…

Linux安装、卸载软件

在linux环境中&#xff0c;尤其是cenos中安装过一些软件&#xff0c;一般是二进制安装与源码安装&#xff0c;现小结一下linux中的安装与卸载。 一、通常Linux应用软件的安装包有三种&#xff1a; 1) tar包&#xff0c;如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具t…

java绘制_Java 绘制简单图形的问题

代码能运行成功但东西出不来能帮忙看下代码吗&#xff1f;.O_O.importjava.awt.Color;importjava.awt.Graphics2D;importjavax.swing.JComponent;importjavax.swing.JFrame;importjava.awt.geom....代码 能运行成功 但东西出不来 能帮忙看下代码吗&#xff1f;.O_O.import java…

SonarQube中的Maven项目的单元和集成测试报告

自SonarQube 4.2起。 测试报告不是在Maven构建期间由Sonar Maven插件生成的&#xff08;请参阅SonarQube的博客文章 &#xff09;。 因此&#xff0c;在Sonar Maven插件收集SonarQube服务器的信息之前&#xff0c;必须由另一个插件生成测试报告。 在这里&#xff0c;Jacoco Mav…

IOS-状态栏的简单操作

一、启动时隐藏状态栏 1、在info.plist里面 Status bar is initially hidden 设置为 YES2、在appDelagate里面 设置 [application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 二、将所有页面状态栏字体颜色设为白色1.在info.plist中添加一个字段&#x…

python中、文件最重要的功能是( )和接收数据_Python基础语法14个知识点大串讲

来源&#xff1a;Python数据之道Python基础语法大串讲Python 是一门面向对象的编程语言&#xff0c;相信这篇文章对于初学者而言应该会有一个比较大的帮助&#xff0c;下面我们将 Python 中常用的基础语法和函数做了一个汇总&#xff0c;满满的干货&#xff0c;供大家学习。1、…

hadoop简单介绍_Hadoop:简单介绍

hadoop简单介绍什么是Hadoop&#xff1a; Hadoop是用Java编写的框架&#xff0c;用于在大型商品硬件群集上运行应用程序&#xff0c;并具有类似于Google File System和MapReduce的功能 。 HDFS是一个高度容错的分布式文件系统&#xff0c;与Hadoop一样&#xff0c;旨在部署在低…

SQL预编译防注入小测试

个人对SQL预编译的认识: 1、效率提升,对SQL语句编译一次可多次使用.避免了硬解析和软解析等步骤&#xff0c;当执行的语句上规模的时候性能差异还是很明显的。 2、安全提升,预编译之后的SQL语句,语义不会发生变化,安全性有相当大的提升。 using System; using System.Collectio…

春天:注入列表,地图,可选对象和getBeansOfType()陷阱

如果您使用Spring框架超过一个星期&#xff0c;那么您可能已经知道此功能。 假设您有多个bean实现了给定的接口。 尝试仅自动接线此类接口的一个bean注定会失败&#xff0c;因为Spring不知道您需要哪个特定实例。 您可以通过使用Primary批注来指定一个优先于其他实现的“ 最重要…

python实现表格分析与建模_python实现数据分析与建模

前言首先我们做数据分析&#xff0c;想要得出最科学&#xff0c;最真实的结论&#xff0c;必须要有好的数据。而实际上我们一般面对的的都是复杂&#xff0c;多变的数据&#xff0c;所以必须要有强大的数据处理能力&#xff0c;接下来&#xff0c;我从我们面临的最真实的情况&a…