比较Java中几个常用集合添加元素的效率

初始化需要进行比较的集合,统一增加10万个元素,获取整个过程的执行时间。

1、List集合增加元素

 1 private static void testList() {
 2
 3         List<Integer> list = new ArrayList<Integer>();
 4
 5         long startTime = System.currentTimeMillis(); // 获取开始时间
 6         for (int i = 0; i < 100000; i++) {
 7
 8             list.add(i);
 9
10         }
11         long endTime = System.currentTimeMillis(); // 获取结束时间
12
13         System.out.println("List添加元素程序运行时间为:" + (endTime - startTime) + "ms"); // 输出程序运行时间
14
15     }

程序输出:

List添加10万个元素程序运行时间为:8ms

2、Set集合增加元素

 1 private static void testSet() {
 2
 3         Set<Integer> set = new HashSet<Integer>();
 4
 5         long startTime = System.currentTimeMillis(); // 获取开始时间
 6         for (int i = 0; i < 100000; i++) {
 7
 8             set.add(i);
 9
10         }
11         long endTime = System.currentTimeMillis(); // 获取结束时间
12
13         System.out.println("Set添加10万个元素程序运行时间为:" + (endTime - startTime) + "ms"); // 输出程序运行时间
14
15     }

程序输出:

Set添加10万个元素程序运行时间为:17ms

3、LinkedList集合增加元素

 1 private static void testLinkedList() {
 2
 3         List<Integer> list = new LinkedList<Integer>();
 4
 5         long startTime = System.currentTimeMillis(); // 获取开始时间
 6         for (int i = 0; i < 100000; i++) {
 7
 8             list.add(i);
 9
10         }
11         long endTime = System.currentTimeMillis(); // 获取结束时间
12
13         // 输出程序运行时间
14         System.out.println("LinkedList添加10万个元素程序运行时间为:" + (endTime - startTime) + "ms");
15
16     }

程序输出:

LinkedList添加10万个元素程序运行时间为:8ms

4、TreeSet集合增加元素

 1 private static void testTreeSet() {
 2
 3         Set<Integer> set = new TreeSet<Integer>();
 4
 5         long startTime = System.currentTimeMillis(); // 获取开始时间
 6         for (int i = 0; i < 100000; i++) {
 7
 8             set.add(i);
 9
10         }
11         long endTime = System.currentTimeMillis(); // 获取结束时间
12
13         // 输出程序运行时间
14         System.out.println("TreeSet添加10万个元素程序运行时间为:" + (endTime - startTime) + "ms");
15
16     }

程序输出:

TreeSet添加10万个元素程序运行时间为:40ms

总结:在不考虑去重和排序的情况下,以上几个常用集合的执行效率排序为:ArrayList >= LinkedList > HashSet > TreeSet

5、HashMap集合增加元素

 1 private static void testHashMap() {
 2
 3         Map<Integer, Object> hashMap = new HashMap<Integer, Object>();
 4
 5         long startTime = System.currentTimeMillis(); // 获取开始时间
 6         for (int i = 0; i < 100000; i++) {
 7             hashMap.put(i, "test");
 8         }
 9
10         long endTime = System.currentTimeMillis(); // 获取结束时间
11
12         // 输出程序运行时间
13         System.out.println("HashMap添加10万个元素程序运行时间为:" + (endTime - startTime) + "ms");
14
15     }

程序输出:

HashMap添加10万个元素程序运行时间为:17ms

6、TreeMap集合增加元素

 1 private static void testTreeMap() {
 2
 3         Map<Integer, Object> treeMap = new TreeMap<Integer, Object>();
 4
 5         long startTime = System.currentTimeMillis(); // 获取开始时间
 6         for (int i = 0; i < 100000; i++) {
 7             treeMap.put(i, "test");
 8         }
 9
10         long endTime = System.currentTimeMillis(); // 获取结束时间
11
12         // 输出程序运行时间
13         System.out.println("TreeMap添加10万个元素程序运行时间为:" + (endTime - startTime) + "ms");
14     }

程序输出:

TreeMap添加10万个元素程序运行时间为:40ms

总结:在不考虑排序的情况下,HashMap的执行效率高于TreeMap:HashMap > TreeMap。

时间: 2024-12-28 01:02:44

比较Java中几个常用集合添加元素的效率的相关文章

Java中的容器(集合)之HashMap源码解析

1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是一个以键值对存储的容器. hashMap底层实现为数组+链表+红黑树(链表超过8时转为红黑树,JDK7为数组+链表). HashMap会根据key的hashCode得到对应的hash值,再去数组中找寻对应的数组位置(下标). hash方法如下: static final int hash(Object key

Java 中几种常用的线程池

Java 中几种常用的线程池 转载 : https://www.cnblogs.com/sachen/p/7401959.html 原创 2016年04月14日 23:29:01 标签: java / 线程池 / Executor 878 概述: 在java内置API中操作线程所用到的类为Thread.创建线程一般有两种方式, 继承Thread方式 实现Runnable方式,并以runnable作为target创建Thread 在Android中的耗时任务一般都需要另开线程来执行,常常需要用线程

java中的数据结构(集合|容器)

对java中的数据结构做一个小小的个人总结,虽然还没有到研究透彻jdk源码的地步.首先.java中为何需要集合的出现?什么需求导致.我想对于面向对象来说,对象适用于描述任何事物,所以为了方便对于对象的操作.存储就出现了集合,集合应该是存储对象最常用的一种方式了,相对于数组更灵活,可变长度.同时集合也只能存储对象不能使基本数据类型. 集合框架分为两个派系Collection和Map而每一种集合类型都是基于特定的数据结构,Collection接口继承了Iterable接口所以可以使用Iterable

java 中几种常用数据结构

Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类. 一.几个常用类的区别 1.ArrayList: 元素单个,效率高,多用于查询 2.Vector: 元素单个,线程安全,多用于查询 3.LinkedList:元素单个,多用于插入和删除 4.HashMap: 元素成对,元素可为空 5.HashTable: 元素成对,线程安全,元素不可为空 二.Vector.ArrayList和L

Java中Math类常用函数总结

Java中比较常用的几个数学公式的总结: //取整,返回小于目标函数的最大整数,如下将会返回-2 Math.floor(-1.8): //取整,返回发育目标数的最小整数 Math.ceil() //四舍五入取整 Math.round() //计算平方根 Math.sqrt() //计算立方根 Math.cbrt() //返回欧拉数e的n次幂 Math.exp(3); //计算乘方,下面是计算3的2次方 Math.pow(3,2); //计算自然对数 Math.log(); //计算绝对值 Mat

Java 中必的常用类(很实用)

Java中必须了解的常用类 一.包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不能调用方法.功能简单...,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型. 基本类型和包装类之间的对应关系: 注意:有两个包装类的名称比较特殊一个是Integer,另一个是Character,其他都是基本数据类首

JAVA中几种常用的RPC框架介绍

RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分,使系统更易拓展.Java中的RPC框架比较多,各有特色,广泛使用的有RMI.Hessian.Dubbo等.RPC还有一个特点就是能够跨语言,本文只以JAVA语言里的RPC为例. 对于RPC有一个逻辑关系图,以RMI为例: 其他的框架结构也类似,区别在于对象的序列化方法,传输对象的通讯协议,以及注册中心的管理与failover设计(利用zookeeper). 客户端和服务端可以运行在不同的JVM中,Client只

Java中的容器(集合)

1.Java常用容器:List,Set,Map List: 继承了Collection接口(public interface List<E> extends Collection<E> ),有序且允许出现重复值. Set: 继承了Collection接口(public interface Set<E> extends Collection<E> ),无序且不允许出现重复值. Map: 是一个使用键值对存储的容器(public interface Map<

java中有关数组或集合的起始位详解

在jdbc连接数据库时,起始位都是从1开始的 例如:Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "ms"); String sql="SELECT * FROM users WHERE NAME=?"; pstm=