欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java多个数据集合类的使用细节点总结

程序员文章站 2022-03-26 16:45:47
JVM配置, 防止发生GCArrayListpublic void myArrayListAdd() { List list = new ArrayList<>(); long startTime = System.currentTimeMillis(); for (int i = 0; i < 50000000; i++) { list.add(i); } long endTime = System.currentTimeMi...

ArrayList和LinkedList插入效率对比

JVM配置, 防止发生GC

Java多个数据集合类的使用细节点总结

ArrayList

public void myArrayListAdd() { List list = new ArrayList<>(); long startTime = System.currentTimeMillis(); for (int i = 0; i < 50000000; i++) { list.add(i); } long endTime = System.currentTimeMillis(); System.out.println("array插入效率" + (endTime - startTime)); } 

打印

Java多个数据集合类的使用细节点总结

LinkedList

public void myLinkedListAdd() { LinkedList list = new LinkedList<>(); long startTime = System.currentTimeMillis(); for (int i = 0; i < 50000000; i++) { list.addFirst(i); } long endTime = System.currentTimeMillis(); System.out.println("link插入效率" + (endTime - startTime)); } 

打印

Java多个数据集合类的使用细节点总结

结论

在JVM不进行GC的情况下, 5kw的测试数据量插入, ArrayList效率比LinkedList要快一些

插入为什么会慢的原因

ArrayList在数组容量不够的情况下, 会复制数据, 导致效率下降
LinkedList在插入的时候, 会创建节点Note对象, 创建对象的开销是非常大的

优化

ArrayList可以在初始化的时候设置大小, 减少复制带来的性能消耗

public void myArrayListAdd() { List list = new ArrayList<>(50000000); long startTime = System.currentTimeMillis(); for (int i = 0; i < 50000000; i++) { list.add(i); } long endTime = System.currentTimeMillis(); System.out.println("array插入效率" + (endTime - startTime)); } 

打印

Java多个数据集合类的使用细节点总结

为什么ArrayList的属性elementData需要transient修饰符

ArrayList在容量不够的时候, 是需要扩容的, 这时候数组里面就会有大量的空元素, 这些空元素是不需要序列化的, 所以会有transient修饰符

为什么HashSet的Value不能为NULL

HashSet的底层使用的HashMap

public boolean add(E e) { return map.put(e, PRESENT)==null; } 

在添加数据的时候, 如果Value为null, map.put()方法, 无法判断之前是否已经有该Key存在
Java多个数据集合类的使用细节点总结

本文地址:https://blog.csdn.net/xushijie89/article/details/108036800

相关标签: Java 集合