JAVA数据集合:Set与Get效率对比

2023-11-02

1 实例测试代码

<pre name="code" class="java">        // 1 ArrayList set sort elements and list elements
	public static void printArrList() {
		List<String> listLined = new ArrayList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (int m = 0; m < listLined.size(); m++) {
			String tempString = listLined.get(m);
		}
		long st4 = System.currentTimeMillis();
		System.out.println("arrayList Get Elements time By normal =" + (st4 - st3));
	}

	// 2 LinedkList set sort elements and list elements
	public static void printLinkedList() {
		List<String> listLined = new LinkedList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < <span style="color:#FF0000;">100000</span>; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (int m = 0; m < listLined.size(); m++) {
			String tempString = listLined.get(m);
		}
		long st4 = System.currentTimeMillis();
		System.out.println("LinkedList Get Elements time  By normal =" + (st4 - st3)); 
	}

	// 3 ArrayList set sort elements and list elements By FOR
	public static void printArrListByFor() {
		List<String> listLined = new ArrayList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (String m : listLined) {
			String tempString = m;
		}
		long st4 = System.currentTimeMillis();
		System.out.println("arrayList Get Elements By FOR  with time="
				+ (st4 - st3));
	}

	// 4 LinkedList set sort elements and list elements By FOR
	public static void printLinkedListByFor() {
		List<String> listLined = new LinkedList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		for (String m : listLined) {
			String tempString = m;
		}
		long st4 = System.currentTimeMillis();
		System.out.println("LinkedList Get Elements By FOR  with time="
				+ (st4 - st3));
	}

	// 5 ArrayList set sort elements and list elements By Itorator
	public static void printArrListByItorator() {
		List<String> listLined = new ArrayList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		Iterator<String> iterator = listLined.iterator();
		while( iterator.hasNext() ){ 
			String tempString = iterator.next();
		}
		long st4 = System.currentTimeMillis();
		System.out.println("arrayList Get Elements By Itorator  with time="
				+ (st4 - st3));
	}

	// 6 LinkedList set sort elements and list elements By Itorator
	public static void printLinkedListByItorator() {
		List<String> listLined = new LinkedList<String>(); 
		long st3 = System.currentTimeMillis();
		for (int x = 0; x < 1000000; x++) {
			listLined.add(String.valueOf(x));
		} 
		Iterator<String> iterator = listLined.iterator();
		while( iterator.hasNext() ){ 
			String tempString = iterator.next();
		}
		long st4 = System.currentTimeMillis();
		System.out.println("LinkedList Get Elements By Itorator  with time="
				+ (st4 - st3));
	}

	public static void main(String[] args) {
		for(int x = 1; x <= 5 ; x++ ){
                  System.out.println(" loop test time:" + x);
		printArrList();
			printLinkedList();
			printArrListByFor();
			printLinkedListByFor();
			printArrListByItorator();
			printLinkedListByItorator();
		}
	}


 


2   3次输出结果

<pre name="code" class="java">loop test time:1
arrayList Get Elements time By normal =184
LinkedList Get Elements time  By normal =7434
arrayList Get Elements By FOR  with time=218
LinkedList Get Elements By FOR  with time=138
arrayList Get Elements By Itorator  with time=231
LinkedList Get Elements By Itorator  with time=92

 loop test time:2
arrayList Get Elements time By normal =98
LinkedList Get Elements time  By normal =7428
arrayList Get Elements By FOR  with time=185
LinkedList Get Elements By FOR  with time=62
arrayList Get Elements By Itorator  with time=92
LinkedList Get Elements By Itorator  with time=180

 loop test time:3
arrayList Get Elements time By normal =43
LinkedList Get Elements time  By normal =8004
arrayList Get Elements By FOR  with time=104
LinkedList Get Elements By FOR  with time=64
arrayList Get Elements By Itorator  with time=76
LinkedList Get Elements By Itorator  with time=51

 loop test time:4
arrayList Get Elements time By normal =47
LinkedList Get Elements time  By normal =7490
arrayList Get Elements By FOR  with time=109
LinkedList Get Elements By FOR  with time=64
arrayList Get Elements By Itorator  with time=99
LinkedList Get Elements By Itorator  with time=65
 loop test time:5
arrayList Get Elements time By normal =62
LinkedList Get Elements time  By normal =7890
arrayList Get Elements By FOR  with time=44
LinkedList Get Elements By FOR  with time=57
arrayList Get Elements By Itorator  with time=84
LinkedList Get Elements By Itorator  with time=49

 
注意:1  printArrList(); printArrListByFor(); printLinkedListByFor();printArrListByItorator();处于千万量级别, 

             2 printLinkedList()方法只能处于十万级别量, printLinkedListByItorator()只能处于百万量级别,千万量级别会报:java.lang.OutOfMemoryError: Java heap space

3 结论

1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

 2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

 3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据 ,但在尾部新增和删除除外。

4. For(foreach)、Iterator原理都是基于迭代器,区别不大,在获取元素的时候的时间复杂度是 O(1) (使用了 getNext()hasNext() 方法),最终的时间复杂度为 O(n), 并且两者有迭代器的内存开销;
    而LinkedList循环里每次在调用 get(i) 的时候花费的时间复杂度为 O(n),最终整个循环的时间复杂度就是 O(n^2);
        ArrayList循环里每次在调用  get(i) 方法的时间复杂度就是 O(1),最终整个循环的时间复杂度就是 O(n);


4 建议

  如果不考虑内存空间:使用普通的ArrayList 的Iterator 方法遍历,为最优方案

  考虑内存空间:使用普通的ArrayList,并for遍历为最优方案


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA数据集合:Set与Get效率对比 的相关文章

  • 【区块链介绍】区块链的来龙去脉

    1 了解区块链技术的起源 分布式系统 弱中心化是区块链思想的核心 P2P网络 为区块链提供了网络层基础架构 任何一个节点都能与其他节点进行传输 与其它节点保持一致 共识算法 区块链技术的核心 实现了数据的一致存储 密码学 为区块链数据的传输
  • 高数——彻底搞懂如何判断反常积分收敛和发散

    反常积分收敛和发散 预备知识 复杂的反常积分 真题 预备知识 1 极限 不定积分与定积分的基本计算 2 找等价无穷小 3 无穷小和无穷大速度的比较 趋向无穷大的速度 x x x x xx gt e

随机推荐

  • Celery介绍以及使用

    文章目录 celery 一 什么是celery 1 celery是什么 2 使用场景 3 Celery的优点 4 Celery的安装 二 Celery执行异步任务 1 创建异步任务执行文件 消费者 2 创建生产者文件 3 创建result文
  • InnoDB引擎架构

    逻辑存储结构 表空间 ibd文件 一个mysql实例可以对应多个表空间 用于存储记录 索引等数据 段 分为数据段 索引段 回滚段 InnoDB是索引组织表 数据段就是B 树的叶子节点 索引段即为B 树的非叶子节点 段用来管理多个Extent
  • Vue中vuex的使用(三)

    vuex中getters的使用 1 概念 当state中的数据需要经过加工后再使用时 可以使用getters加工 2 在store js中追加getters配置 准备getter 用于将state中sum加工 const getters b
  • vue如何获取当前页面的url

    如果你使用 vue router 文档在这里 路由信息对象的属性 const routes path portfolio year review component Portfolio 这个样子获取 this route params ye
  • 二十一.数据结构学习笔记.1

    一 抽象数据类型 抽象数据类型 Abstract Data Type ADT 是一些操作的集合 抽象数据类型是数学的抽象 在ADT定义中根本没涉及如何实现这些操作 例如 表 集合 图及它们的操作 它们都可以看作抽象数据类型 就像整数 实数和
  • cmake:if

    有条件地执行一组命令 概要 if
  • java笔记:抽象方法与抽象类

    抽象方法和抽象类 1 规则 抽象方法和抽象类必须用abstract进行修饰 有抽象方法的类只能被定义为抽象类 抽象类中可以没有抽象方法 抽象类不能被实例化 无法使用new调用抽象类的构造器创建抽象类的实例 无法创建实例 抽象类中可以包含成员
  • 网络安全渗透测试实验一

    1 实验目的和要求 理解网络扫描 网络侦察的作用 通过搭建网络渗透测试平台 了解并熟悉常用搜索引擎 扫描工具的应用 通过信息收集为下一步渗透工作打下基础 系统环境 Kali Linux 2 Windows 网络环境 交换网络结构 实验工具
  • pyqt5数据库使用教程

    1 关于连接sqlite数据库时使用QSqlTableModel模型查看具体数据 通过行号 列名称来获取某单元格的数据 注 model中的一行称为一条record 一列称为一条field 方法 1 使用QSqlRecord类 QSqlRec
  • Python中的pass语句详解

    作者 永劫 一 概述 在本文中 我们将详细介绍Python中的pass语句 包括其定义 作用以及使用场景 pass语句在Python编程中是一个实用的占位符 它可以让程序运行在某些特定的情况下 而不引发任何错误 二 pass语句的定义 pa
  • scrapy框架之post请求

    scrapy框架之post请求 1 post请求 2 通过scrapy框架用爬虫发起post请求 3 使用Scrapy框架破解验证码 1 post请求 首先从浏览器打开百度翻译 去抓一下接口 右键检查 一开始是network是什么都没有的
  • 在ubuntu上安装pcl库并配置vscode使用cmake生成可执行文件

    文章目录 在ubuntu上安装pcl库并配置vscode使用cmake生成可执行文件 先列举一下我踩的坑 一 安装vtk7 1 QT5 12 6 VTK7 1 1 二 安装pcl1 9 1 安装依赖库 安装PCL库 三 使用vscode c
  • 根据对象的某一个属性排序

    根据lenval进行排序 思路 使用sort函数 const obj any ID 1 lenval 1 ID 2 lenval 3 ID 3 lenval 2 function compare property return functi
  • Scrapy命令行详解

    官方文档 1 创建项目 scrapy startproject myproject project dir 这将在project dir目录下创建一个Scrapy项目 如果project dir没有指定 project dir将与mypro
  • [运维]python 启用http 文件服务

    要在Python中启用HTTP文件服务 您可以使用内置的http server模块 在Python 3中 或SimpleHTTPServer模块 在Python 2中 在Python 3中 python m http server 在Pyt
  • @CacheEvict 清除多个key

    借用 Caching实现 入参是基本类型的 Caching evict CacheEvict value Cache CONSTANT key CacheKey SINGLE ROLE NAME roleId CacheEvict valu
  • 遗传算法程序 matlab(转)

    遗传算法程序 matlab 一 本程序收集于网络 本人并未运行 如有问题请与作者联系 如有侵权请告之 转载 http hi baidu com hopeasy blog item c82182c302781650b319a802 html
  • DirectX11 顶点和顶点布局

    顶点和顶点布局 1 如何描述顶点 5 5 1节已经讲过 在Direct3D中 顶点由空间位置和各种附加属性组成 Direct3D可以让我们灵活地建立属于我们自己的顶点格式 换句话说 它允许我们定义顶点的分量 要创建一个自定义的顶点格式 我们
  • Build finished with errors/Executable Not Found

    项目场景 iOS工程 点击运行 或者点击编译 问题描述 能运行起来 但是报错 报错内容如下图 报了build finished with errors的错误 但是具体原因却没有提示 原因分析 编译的错误 但是工程却能运行起来 就很奇怪 报错
  • JAVA数据集合:Set与Get效率对比

    1 实例测试代码 pre class java 1 ArrayList set sort elements and list elements public static void printArrList List pre