当前位置: 移动技术网 > IT编程>开发语言>Java > Java多个数据集合类的使用细节点总结

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

2020年08月17日  | 移动技术网IT编程  | 我要评论
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

在这里插入图片描述

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)); } 

打印

在这里插入图片描述

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)); } 

打印

在这里插入图片描述

结论

在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)); } 

打印

在这里插入图片描述

为什么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存在
在这里插入图片描述

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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网