首页 > 图灵资讯 > java面试题>正文

java基础面试题-ArrayList和LinkedList

2024-05-15 13:51:58

ArrayList:

 

底层基于数组实现,支持对元素进行快速随机访问,适合随机查找和遍历,不适合插入和删除。(提一句实际上)

默认初始大小为10,当数组容量不够时,会触发扩容机制(扩大到当前的1.5倍),需要将原来数组的数据复制到新的数组中;当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。

LinkedList

底层基于双向链表实现,适合数据的动态插入和删除; 内部提供了List接口中没有定义的方法,用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。(比如JDK官方推荐使用基于linkedList的Deque进行堆栈操作)

ArrayList与LinkedList区别:

都是线程不安全的,ArrayList适用于查找的场景,LinkedList适用于增加、删除多的场景。

实现线程安全:

可以使用原生的Vector,或者是Collections.synchronizedList(List list)函数返回一个线程安全的ArrayList集合。

建议使用concurrent并发包下的CopyOnWriteArrayList的。

①Vector:底层通过synchronize修饰保证线程安全,效率较差。

②CopyOnWriteArrayList:写时加锁,使用了一种叫写时复制的方法;读操作是可以不用加锁的。

上一篇 java基础面试题-Java异常体系
下一篇 java基础面试题-List遍历快速和安全失败

文章素材均来源于网络,如有侵权,请联系管理员删除。