博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA基础:ArrayList和LinkedList区别
阅读量:6265 次
发布时间:2019-06-22

本文共 1704 字,大约阅读时间需要 5 分钟。

  • 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
  • 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
  • 3.对于在指定index位置新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 
  • 4.ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。LinkedList线程安全的处理方法

    方法一:List<String> list = Collections.synchronizedList(new LinkedList<String>());

    方法二:将LinkedList全部换成ConcurrentLinkedQueue

  • 为什么在创建ArrayList对象时要初始化默认容量?

   其实就是为了避免扩容,ArrayList扩容方法,这里 ensureCapacityInternal  才是ArrayList内部调用的扩容方法

/**  * 公有方法  */ public void ensureCapacity(int minCapacity) {
int minExpand = (elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) // any size if not default element table ? 0 // larger than default for default empty table. It's already // supposed to be at default size. : DEFAULT_CAPACITY; if (minCapacity > minExpand) {
ensureExplicitCapacity(minCapacity); } } private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); } ensureExplicitCapacity(minCapacity); } private void ensureExplicitCapacity(int minCapacity) {
modCount++; // overflow-conscious code if (minCapacity - elementData.length > 0) grow(minCapacity); }

扩容的大小为原容量的1.5倍+1(其实是>>1),该方法下有会改变
modCount的值
modCount变量用于在遍历集合(iterator())时,检测是否发生了add、remove操作。

boolean add(E e) ;//在尾部加入元素 void add(int index, E element) ;//在指定位置加入元素

因为调用arraycopy,所以效率低。(但是也没低到哪去 执行100次 每次插入1百万条,查了0.016s)

System.arraycopy(elementData, index, elementData, index + 1,size - index);

 

转载于:https://www.cnblogs.com/showme1942/p/10059559.html

你可能感兴趣的文章
ajax--->简单加法小练习
查看>>
剑指offer例题——反转链表
查看>>
帧内宏块预测流程 (转载)
查看>>
magento性能优化
查看>>
next_permutation函数
查看>>
How to create own operator with python in mxnet?
查看>>
jQuery Ajax 实例 全解析
查看>>
博客装扮3-博客园界面装扮优化教程
查看>>
STM32CubeMX的串口配置,以及驱动代码
查看>>
组合数学 + STL --- 利用STL生成全排列
查看>>
Notepad++配置c/c++环境
查看>>
PHP——获取上传文件的后缀名
查看>>
全面理解HTTP协议
查看>>
lhgdialog弹出窗口控件 v4.1.0使用总结
查看>>
linux 中nvme 的中断申请及处理
查看>>
linux的nvme驱动参数调优
查看>>
unity编辑器之自动提示订外卖
查看>>
完整的项目管理流程(软件开发)
查看>>
PHP命名空间和自动加载初探
查看>>
跳台阶问题 【微软面试100题 第二十七题】
查看>>