java集合--List

Arraylist特点

  • 底层数据结构是数组
  • 查询快,插入删除慢(特殊情况除外)
  • 默认初始容量为10,每次扩容增加当前容量值的一半
  • 非线程安全
  • 可以存储重复元素

LinkedList特点

  • 底层数据结构是链表
  • 查询慢,插入删除快
  • 非线程安全
  • 可以存储重复元素
  • 适用于要头尾操作或插入指定位置的场景

Vector特点

  • 基本和ArrayList一样,只是所有方法都使用synchronized修饰

Arraylist查询为什么比LinkedList快?

​ 因为ArrayList使用数据下标直接就获取到数据的内存地址,而LinkedList内部需要循环移动指针到要查询的位置,所以查询操作性能比较低。

Arraylist插入删除为什么比LinkedList慢?什么情况下比LinkedList快?

​ 因为当在ArrayList中插入或删除数据时,ArrayList内部需要将要操作位置后面的数据后移或者前移一位(本质为复制数据),容量不够时还需要进行扩容。而linkedlist内部只需要将指针循环到要操作位置,然后改变要操作位置的node的前后指针即可

​ 当使用new ArrayList<>()方法初始化,在第一次add的时候,ArrayList内部默认初始化了一个容量大小为10的数组,当容量不够时,进行自动扩容,扩容后大小增加一半,即10-->15-->22-->33。扩容:重新new一个数组,然后将原数据复制进新数组。

​ 插入或删除元素的位置越靠前,ArrayList的速度越慢,反之,插入或删除元素的位置越靠后,ArrayList的速度越快,甚至超越linkedlist,当直接在list尾部添加或删除数据时,Arraylist和LinkedList速度基本一样。

​ 因为当list内数据足够多的时候,插入或删除元素的位置越靠前,ArrayList需要移动的数据就越多,而LinkedList需要移动指针的步数却越少

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。