前言

  本章节将通过实验,测试规则集与线性表的性能。那么如何进行实验呢?针对不同的集合都进行指定数量元素的添加和删除操作,计算耗费时间进行分析。

那么,前两个章节呢,我们分别讲述了什么时候使用Set以及List中的实现类效率最高。下面贴出链接,方便查看:

《规则集之探究何时使用HashSet、LinkedHashSet以及TreeSet?》

《线性表之何时使用ArrayList、LinkedList?》

 代码实现区:

 package collection;

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.TreeSet; /**
*
* Title: SetListPerformerTest Description:规则集和线性表性能比对
*
* @author yacong_liu Email:2682505646@qq.com
* @date 2017年9月13日下午11:41:19
*/
public class SetListPerformerTest {
private static final List<Integer> COL_LIST = new ArrayList<Integer>();
private static final int COL_SIZE = 50000; static {
for (int i = 0; i < COL_SIZE; i++) {
COL_LIST.add(i);
}
} public static void main(String[] args) { /****** start Set ********/
Collection<Integer> setHash = new HashSet<Integer>();
System.out.println("HashSet time is " + getTestTime(setHash, COL_SIZE) + "ms");
Collection<Integer> setLinkedHash = new LinkedHashSet<Integer>();
System.out.println("LinkedHashSet time is " + getTestTime(setLinkedHash, COL_SIZE) + "ms");
Collection<Integer> setTree = new TreeSet<Integer>();
System.out.println("TreeSet time is " + getTestTime(setTree, COL_SIZE) + "ms");
/****** end Set ********/ /****** start List ********/
Collection<Integer> listArray = new ArrayList<Integer>();
System.out.println("ArrayList time is " + getTestTime(listArray, COL_SIZE) + "ms");
Collection<Integer> listLinked = new LinkedList<Integer>();
System.out.println("LinkedList time is " + getTestTime(listLinked, COL_SIZE) + "ms");
/****** end List ********/ } /**
*
* Title: getTestTime Description: 计算集合中 添加元素 和 删除元素所需耗时 以此来进行测试不同的集合
* 插入删除元素时性能
*
* @author yacong_liu Email:2682505646@qq.com
* @date 2017年9月13日下午11:59:40
* @param col
* @param size
* @return
*/
private static long getTestTime(Collection<Integer> col, int size) {
long sTime = System.currentTimeMillis(); // 打乱线性表COL_LIST
Collections.shuffle(COL_LIST); // 往集合中添加元素
for (Integer element : COL_LIST) {
col.add(element);
} Collections.shuffle(COL_LIST); // 从集合中删除元素
for (Integer element : COL_LIST) {
col.remove(element);
} long eTime = System.currentTimeMillis();
return eTime - sTime;
} }

Console输出结果:

 HashSet time is 52ms
LinkedHashSet time is 58ms
TreeSet time is 245ms
ArrayList time is 1806ms
LinkedList time is 3631ms

实验结果分析:

  描述:当我切换不同的COL_SIZE大小的时候,会出现明显的性能情况,5000输出的时候还是挺快的,但是改为500000的时候,只有Setd的实现类快速输出打印了,List实现类一直没有打印输出结果,运行的很慢。其中 HashSet 两种情况下打印输出都是最快的!

  结果:

    1. 规则集Set比线性表List更加的高效! 因此,可以使用规则集的时候,就使用规则集Set。

    2. 使用规则集的时候,如果不需要考虑特别的顺序,那就选择散列集HashSet。

    3. ArrayList和LinkedList 进行删除操作时,复杂度基本一致。注意:线性表中除结尾以外的任意位置上的插入删除元素操作,链式线性表比数组线性表表现的更为高效。

规则集Set与线性表List性能分析的更多相关文章

  1. profiler跟踪事件存为表之后性能分析工具

    使用profiler建立跟踪,将跟踪结果存到表中,使用下面存储过程执行 exec temp_profiler 'tra_tablename'对表数据进行处理归类,然后进行性能分析 1.先建存储过程 2 ...

  2. Java集合性能分析-疯狂Java讲义

    一.各Set实现类的性能分析 HashSet和TreeSet是Set的两个典型实现.HashSet的性能总是比TreeSet好(特别是最常用的添加.查询元素等操作),因为TreeSet需要额外的红黑树 ...

  3. 【java基础 17】集合中各实现类的性能分析

    大致的再回顾一下java集合框架的基本情况 一.各Set实现类的性能分析 1.1,HashSet用于添加.查询 HashSet和TreeSet是Set的两个典型实现,HashSet的性能总是比Tree ...

  4. java 数据类型:ArrayList;LinkList性能分析

    各种线性表的性能分析. java提供的List就是一个线性表接口,ArrayList和LinkedList是线性表的两种实现.基于数组的线性表和基于链表的线性表. 一般来说,我们无需理会ArrayLi ...

  5. Java集合类学习笔记(各种线性表性能分析)

    ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...

  6. Oracle Update 语句语法与性能分析 - 多表关联

    Oracle Update 语句语法与性能分析 - 多表关联   为了方便起见,建立了以下简单模型,和构造了部分测试数据: 在某个业务受理子系统BSS中, SQL 代码 --客户资料表 create ...

  7. Hive中小表与大表关联(join)的性能分析【转】

    Hive中小表与大表关联(join)的性能分析 [转自:http://blog.sina.com.cn/s/blog_6ff05a2c01016j7n.html] 经常看到一些Hive优化的建议中说当 ...

  8. 微服务、分库分表、分布式事务管理、APM链路跟踪性能分析演示项目

    好多年没发博,最近有时间整理些东西,分享给大家. 所有内容都在github项目liuzhibin-cn/my-demo中,基于SpringBoot,演示Dubbo微服务 + Mycat, Shardi ...

  9. C 数据结构1——线性表分析(顺序存储、链式存储)

    之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...

随机推荐

  1. Oracle中dblink如何使用

    Oracle中dblink应用小结Oracle应用服务器OS   1.查看数据库的global_name        SELECT * FROM GLOBAL_NAME;    2.查看global ...

  2. Python使用PDFMiner解析PDF

    近期在做爬虫时有时会遇到网站只提供pdf的情况,这样就不能使用scrapy直接抓取页面内容了,只能通过解析PDF的方式处理,目前的解决方案大致只有pyPDF和PDFMiner.因为据说PDFMiner ...

  3. sns社交系统ThinkSNS+ 更新至V0.8.2,新增圈子功能

    sns社交系统"ThinkSNS+"于7月15日发布了V0.8.0,含开源版本web+H5,及Android APP和iOS APP客户端. V0.8.2版本将于7月29日(本周六 ...

  4. 桥接模式二(Bridge)

    昨天写到了桥接模式的代码实现,今天我们就继续来讲完桥接模式.      有认真看的会发现,昨天的代码实现只是两个维度的变化:哪么有人可能就会问了哪如果我要加多一个维度呢?我要具体到企业的哪个部门,哪我 ...

  5. SpringMVC详解(三)------基于注解的入门实例

    前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能 ...

  6. html table中单元格自动换行

    table中单元格自动换行样式: table-layout: fixed; word-wrap: break-word;   table-layout 可能的值(IE不支持inherit属性) 值 描 ...

  7. Neo4J图库的基础介绍(二)-图库开发应用

    JAX-RS是一个用于构建REST资源的Java API,可以使用JAX-RS注解装饰每一个扩展类,从而让服务器处理对应的http请求,附加注解可以用来控制请求和响应的格式,http头和URI模板的格 ...

  8. js中的访问器属性中的getter和setter函数实现数据双向绑定

    嗯,之前在读js红宝书的时候,在对象那一章有介绍属性类型.第一种数据类型指的是数据属性,第二种是访问器属性.在初识vue的时候,其双向数据绑定也是基于访问器属性中的getter和setter函数原理来 ...

  9. 对vue生命周期/钩子函数的理解

    对于实现页面逻辑交互等效果,我们必须知晓vue的生命周期,才能愉快的玩耍,知道我们写的东西应该挂载到哪里,vue官方给出的api讲解的那叫一个简单啊,如下: 所有的生命周期钩子自动绑定this上下文到 ...

  10. ASP.NET Core 运行原理解剖[2]:Hosting补充之配置介绍

    在上一章中,我们介绍了 ASP.NET Core 的启动过程,主要是对 WebHost 源码的探索.而本文则是对上文的一个补充,更加偏向于实战,详细的介绍一下我们在实际开发中需要对 Hosting 做 ...