我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何进行 java和.net的HashSet对比

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何进行 java和.net的HashSet对比

本篇文章给大家分享的是有关如何进行 java和.net的HashSet对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

今天,应为工作问题,测试了一下C#和java同意的代码功能执行情况,发现一个问题。

HashSet.contains 方法对比,在java下面性能居然没有c#的高。

private static final Logger log = Logger.getLogger(NewClass.class);      public static void main(String[] args) {         for (int j = 0; j < 5; j++) {             HashSet<Integer> ids = new HashSet<>(0);             log.error("开始测试:" + j);             int forCount = 200 * 10000;             for (int i = 0; i < forCount; i++) {                 if (!ids.contains(i)) {                     ids.add(i);                 }             }             log.error("结束测试:" + j + " 执行次数:" + forCount);         }     }

[04-12 16:16:57:427] -> 开始测试:0
[04-12 16:16:58:063] -> 结束测试:0 执行次数:2000000
[04-12 16:16:58:064] -> 开始测试:1
[04-12 16:16:58:835] -> 结束测试:1 执行次数:2000000
[04-12 16:16:58:835] -> 开始测试:2
[04-12 16:16:58:993] -> 结束测试:2 执行次数:2000000
[04-12 16:16:58:994] -> 开始测试:3
[04-12 16:16:59:247] -> 结束测试:3 执行次数:2000000
[04-12 16:16:59:249] -> 开始测试:4
[04-12 16:16:59:382] -> 结束测试:4 执行次数:2000000

看出java运行结果 执行200万次检索插入,执行时间100多毫秒,大约是。

private static final Logger log = Logger.getLogger(NewClass.class);      public static void main(String[] args) {         for (int j = 0; j < 5; j++) {             HashSet<Integer> ids = new HashSet<>(0);             log.error("开始测试:" + j);             int forCount = 2000 * 10000;             for (int i = 0; i < forCount; i++) {                 if (!ids.contains(i)) {                     ids.add(i);                 }             }             log.error("结束测试:" + j + " 执行次数:" + forCount);         }     }

[04-12 16:18:09:345] -> 开始测试:0
[04-12 16:18:24:835] -> 结束测试:0 执行次数:20000000
[04-12 16:18:24:836] -> 开始测试:1
[04-12 16:18:36:600] -> 结束测试:1 执行次数:20000000
[04-12 16:18:36:600] -> 开始测试:2
[04-12 16:18:44:331] -> 结束测试:2 执行次数:20000000
[04-12 16:18:44:331] -> 开始测试:3
[04-12 16:18:51:801] -> 结束测试:3 执行次数:20000000
[04-12 16:18:51:803] -> 开始测试:4
[04-12 16:19:01:277] -> 结束测试:4 执行次数:20000000

而执行2000完成检索插入的时候执行平均时间 大约是9秒左右

接下来我们看看c#的运行结果

static void Main(string[] args)         {             for (int j = 0; j < 5; j++)             {                 HashSet<int> ids = new HashSet<int>();                 Console.WriteLine(DateTime.Now.NowString() + "开始测试:" + j);                 int forCount = 200 * 10000;                 for (int i = 0; i < forCount; i++)                 {                     if (!ids.Contains(i))                     {                         ids.Add(i);                     }                 }                 Console.WriteLine(DateTime.Now.NowString() + "结束测试:" + j + " 执行次数:" + forCount);             }             Console.ReadLine();         }

2015-04-12 16:20:06:223:开始测试:0
2015-04-12 16:20:06:321:结束测试:0 执行次数:2000000
2015-04-12 16:20:06:322:开始测试:1
2015-04-12 16:20:06:413:结束测试:1 执行次数:2000000
2015-04-12 16:20:06:414:开始测试:2
2015-04-12 16:20:06:500:结束测试:2 执行次数:2000000
2015-04-12 16:20:06:500:开始测试:3
2015-04-12 16:20:06:616:结束测试:3 执行次数:2000000
2015-04-12 16:20:06:617:开始测试:4
2015-04-12 16:20:06:717:结束测试:4 执行次数:2000000

执行200万次检索插入,执行平均时间100毫秒左右,比java略胜一凑 

再看看2000万次的检索插入情况

static void Main(string[] args)         {             for (int j = 0; j < 5; j++)             {                 HashSet<int> ids = new HashSet<int>();                 Console.WriteLine(DateTime.Now.NowString() + "开始测试:" + j);                 int forCount = 2000 * 10000;                 for (int i = 0; i < forCount; i++)                 {                     if (!ids.Contains(i))                     {                         ids.Add(i);                     }                 }                 Console.WriteLine(DateTime.Now.NowString() + "结束测试:" + j + " 执行次数:" + forCount);             }             Console.ReadLine();         }

2015-04-12 16:20:51:746:开始测试:0
2015-04-12 16:20:52:633:结束测试:0 执行次数:20000000
2015-04-12 16:20:52:634:开始测试:1
2015-04-12 16:20:53:645:结束测试:1 执行次数:20000000
2015-04-12 16:20:53:645:开始测试:2
2015-04-12 16:20:54:615:结束测试:2 执行次数:20000000
2015-04-12 16:20:54:615:开始测试:3
2015-04-12 16:20:55:623:结束测试:3 执行次数:20000000
2015-04-12 16:20:55:624:开始测试:4
2015-04-12 16:20:56:561:结束测试:4 执行次数:20000000

看看2000万次的检索插入时间大约是1秒钟样子。

这个不晓得是不是量级的性能问题呢????

接下来再看看,直接插入,。,因为插入也自带了检索条件的

private static final Logger log = Logger.getLogger(NewClass.class);      public static void main(String[] args) {         for (int j = 0; j < 5; j++) {             HashSet<Integer> ids = new HashSet<>(0);             log.error("开始测试:" + j);             int forCount = 2000 * 10000;             for (int i = 0; i < forCount; i++) {                 ids.add(i);             }             log.error("结束测试:" + j + " 执行次数:" + forCount);         }     }

[04-12 16:30:32:591] -> 开始测试:0
[04-12 16:30:44:725] -> 结束测试:0 执行次数:20000000
[04-12 16:30:44:726] -> 开始测试:1
[04-12 16:30:57:535] -> 结束测试:1 执行次数:20000000
[04-12 16:30:57:536] -> 开始测试:2
[04-12 16:31:08:237] -> 结束测试:2 执行次数:20000000
[04-12 16:31:08:237] -> 开始测试:3
[04-12 16:31:19:306] -> 结束测试:3 执行次数:20000000
[04-12 16:31:19:309] -> 开始测试:4
[04-12 16:31:23:810] -> 结束测试:4 执行次数:20000000

单纯插入java执行2000万次的时间大约是9秒多,

static void Main(string[] args)         {             for (int j = 0; j < 5; j++)             {                 HashSet<int> ids = new HashSet<int>();                 Console.WriteLine(DateTime.Now.NowString() + "开始测试:" + j);                 int forCount = 2000 * 10000;                 for (int i = 0; i < forCount; i++)                 {                         ids.Add(i);                 }                 Console.WriteLine(DateTime.Now.NowString() + "结束测试:" + j + " 执行次数:" + forCount);             }             Console.ReadLine();         }

2015-04-12 16:32:35:355:开始测试:0
2015-04-12 16:32:36:064:结束测试:0 执行次数:20000000
2015-04-12 16:32:36:065:开始测试:1
2015-04-12 16:32:36:879:结束测试:1 执行次数:20000000
2015-04-12 16:32:36:879:开始测试:2
2015-04-12 16:32:37:657:结束测试:2 执行次数:20000000
2015-04-12 16:32:37:657:开始测试:3
2015-04-12 16:32:38:466:结束测试:3 执行次数:20000000
2015-04-12 16:32:38:467:开始测试:4
2015-04-12 16:32:39:238:结束测试:4 执行次数:20000000

c# 2000万次插入执行时间大约是1秒不到。,,是不是很有趣。。。

不知道是不是我电脑问题,还是我的执行情况不对。各位看官提出建议看看。。。

======================================================================

这里是应各位看官要求,改成string的方式,同样是用guid的生成方式,保证完全代码一模一样

static void Main(string[] args)         {             Console.ReadLine();             for (int j = 0; j < 5; j++)             {                 serverID = j;                 id = 0;                 HashSet<String> ids = new HashSet<String>();                 Console.WriteLine(DateTime.Now.NowString() + "开始测试:" + j);                 int forCount = 600 * 10000;                 for (int i = 0; i < forCount; i++)                 {                     //long tempID = getId();                     String tempID = Guid.NewGuid().ToString();                     bool add = ids.Add(tempID);                     if (!add)                     {                         Console.WriteLine(DateTime.Now.NowString() + "重复:" + i + "  " + tempID);                     }                 }                 Console.WriteLine(DateTime.Now.NowString() + "结束测试:" + j + " 执行次数:" + forCount);             }             Console.ReadLine();         }

2015-04-12 18:17:19:501:开始测试:0
2015-04-12 18:17:29:757:结束测试:0 执行次数:6000000
2015-04-12 18:17:29:757:开始测试:1
2015-04-12 18:17:39:582:结束测试:1 执行次数:6000000
2015-04-12 18:17:39:583:开始测试:2
2015-04-12 18:17:48:141:结束测试:2 执行次数:6000000
2015-04-12 18:17:48:141:开始测试:3
2015-04-12 18:17:56:255:结束测试:3 执行次数:6000000
2015-04-12 18:17:56:256:开始测试:4
2015-04-12 18:18:04:374:结束测试:4 执行次数:6000000

执行插入600完成执行时间大约是9秒

private static final SimpleDateFormat DF2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS: ");      public static String getDateFormat1() {         return DF2.format(new Date());     }      public static void main(String[] args) throws Exception {         for (int j = 0; j < 5; j++) {             serverID = j;             id = 0;             HashSet<String> ids = new HashSet<>(0);             System.out.println(getDateFormat1() + "开始测试:" + j);             int forCount = 600 * 10000;             for (int i = 0; i < forCount; i++) {                 //long tempid = getId();                 String tempid = UUID.randomUUID().toString();                 boolean add = ids.add(tempid);                 if (!add) {                     System.out.println(getDateFormat1() + "重复: " + i + "    " + tempid);                 }             }             System.out.println(getDateFormat1() + " 结束测试:" + j + " 执行次数:" + forCount);         }     }

2015-04-12 18:19:34:589: 开始测试:0
2015-04-12 18:19:49:246:  结束测试:0 执行次数:6000000
2015-04-12 18:19:49:246: 开始测试:1
2015-04-12 18:20:00:516:  结束测试:1 执行次数:6000000
2015-04-12 18:20:00:516: 开始测试:2
2015-04-12 18:20:10:670:  结束测试:2 执行次数:6000000
2015-04-12 18:20:10:670: 开始测试:3
2015-04-12 18:20:20:401:  结束测试:3 执行次数:6000000
2015-04-12 18:20:20:401: 开始测试:4
2015-04-12 18:20:31:124:  结束测试:4 执行次数:6000000

同样是600完成大约是11秒

以上就是如何进行 java和.net的HashSet对比,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何进行 java和.net的HashSet对比

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何进行 java和.net的HashSet对比

本篇文章给大家分享的是有关如何进行 java和.net的HashSet对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。今天,应为工作问题,测试了一下C#和java同意的代码功
2023-06-17

如何进行Java和Python的编程对比

这篇文章给大家介绍如何进行Java和Python的编程对比,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。因为以前会点Java,现在来看当然是弱爆了。学习Python的需求非常紧迫,所以我想快速学习掌握Python,有没
2023-06-04

如何进行.NET 的WebSocket开发包比较

如何进行.NET 的WebSocket开发包比较,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Web项目常常需要将数据尽可能快地推送给客户,必要时无需等待客户端请求。对于与用户
2023-06-17

如何进行LinuxDeepin 与 3.0的对比

本篇文章给大家分享的是有关如何进行LinuxDeepin 与 3.0的对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近学校网速大改观,http下载峰值达到6MB/s,所以
2023-06-16

如何进行Rails和Django的深度技术对比

这篇文章将为大家详细讲解有关如何进行Rails和Django的深度技术对比 ,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。我想以一个免责声明来开始下面的内容。我使用Django开发网站已经有
2023-06-17

如何进行对比Ruby和Python的垃圾回收

本篇文章为大家展示了如何进行对比Ruby和Python的垃圾回收,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我觉得与其直接将幻灯片发布出来,不如在我还有印象的时候将它写成博客来的更有意义。除了有关
2023-06-17

如何进行GNU/kFreeBSD和GNU/Linux性能对比

如何进行GNU/kFreeBSD和GNU/Linux性能对比,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Debian Squeeze将发布基于FreeBSD kernel
2023-06-16

如何进行.Net 垃圾回收和大对象处理

如何进行.Net 垃圾回收和大对象处理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。CLR垃圾回收器根据所占空间大小划分对象。大对象和小对象的处理方式有很大区别。比如内存碎片整
2023-06-17

如何进行Service Mesh中的Linkerd 和Istio框架对比

本篇文章给大家分享的是有关如何进行Service Mesh中的Linkerd 和Istio框架对比,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引言:各个细分行业和领域的组织机
2023-06-04

如何进行Java中对HashMap的深度分析与比较

如何进行Java中对HashMap的深度分析与比较,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在Java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能
2023-06-03

java如何用equals进行比较

在Java中,可以使用equals()方法来比较两个对象是否相等。equals()方法是Object类的一个方法,可以在所有的Java类中使用。在使用equals()方法进行比较时,需要注意以下几点:1. equals()方法是用来比较两个
2023-08-22

利用Java如何实现对字符串进行比较

本篇文章给大家分享的是有关利用Java如何实现对字符串进行比较,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。CompareTo()方法简介首先,它属于java.lang.Str
2023-05-31

如何进行API测试工具SoapUI和Postman对比分析

今天就跟大家聊聊有关如何进行API测试工具SoapUI和Postman对比分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近公司要引入API测试工具,经过调查和了解,最终决定在S
2023-06-04

如何进行malloc/free与new/delete的对比分析

今天给大家介绍一下如何进行malloc/free与new/delete的对比分析。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。相同点:都可用于申请动态内存和释
2023-06-17

如何进行Microsoft Office 2013与WPS Office 2013对比

如何进行Microsoft Office 2013与WPS Office 2013对比,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Microsoft Office2013
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录