list的实现类
list有三大特点:有索引,有序,可重复
- ArrayList:基于数组实现的 List,支持动态扩容和随机访问,适合随机访问较多的场景。
- LinkedList:基于双向链表实现的 List,支持快速插入和删除操作,适合频繁插入、删除操作的场景。
- Vector:同步的动态数组,与 ArrayList 类似,但是支持线程安全,在性能上相对较差,已经不推荐使用。
- Stack:基于 Vector 实现的栈,通常用于后进先出(LIFO)的操作。
性能测试
从尾部添加元素
arrayList和linkedList尾插的性能相差不大,stack和vector没什么差别,
其中,stack是vector的子类
任意位置插入数据
由于vector及其子类已经被市场淘汰了,所以这里只比较arrayList以及linkedList
很明显,linkedList在任意位置插入元素的性能远优于arrayList,大约是一万倍的差距(结果有点吓人,可能实际相差没那么大),这是因为arrayList底层是一个数组,在某个位置删除或插入数据,都要移动后面的元素,造成了性能损耗,而linkedList底层是链表(单项链表),在任意位置增删元素的耗时都差不多(其实只会影响上一个元素以及新元素)
获取任意位置的数据
arrayList更快,是linkedList的两百倍,也是因为数组通过索引和起始位置的就能快速计算出目标元素的地址值,而链表还要逐个确认是不是目标元素
结论
仅仅是尾部添加元素和查询元素频繁的话,就选择arrayList
如果是要频繁修改任意元素,就选择linkedList