password
查看人数
type
status
date
slug
summary
category
icon
tags
作者
状态
LinkedList中的add()、addLast()和offerLast()这三个方法都用于向链表尾部添加元素
但是在一些情况下的处理上有略微的区别:
- add(E e)
- 将指定的元素添加到链表尾部
- 如果添加失败了,会抛出异常
- addLast(E e)
- 将指定的元素添加到链表尾部
- 如果添加失败了,会抛出异常
- 它就是add()方法的同义词,完全一样
- offerLast(E e)
- 将指定的元素添加到链表尾部
- 如果添加失败了,不会抛出异常,只是返回false
所以区别主要在于添加失败的情况下:
- add()和addLast()会抛出异常
- offerLast()只返回false
另外,在命名上offerLast()更符合Queue的数据结构的语义。
所以一般来说,如果需要容错处理,选择offerLast()是更好的选择。它不会抛出异常,也从方法名上能清楚地表达出意图。
那为什么会添加失败呢
- 内存不足 LinkedList的每个元素都需要分配内存。如果JVM堆内存已满,就无法成功分配内存来存储新元素,此时添加元素会失败并抛出OutOfMemoryError。
- 容量限制 LinkedList没有指定容量限制,但是如果在构造LinkedList对象时指定了一个最大容量,那么当链表元素个数达到指定最大容量时,后续的添加操作会失败。
- 其他并发修改 在多线程环境下,如果同时有多个线程正在对同一个LinkedList进行写操作,很可能会导致修改冲突而添加失败。
- 链表结构受损 如果因程序错误导致了链表内部的数据结构被破坏,那么后续的添加操作也会失败。
所以使用offerLast()而不是add()可以避免添加元素失败时不必要的异常抛出。
offerLast()方法会主动判断是否可以成功添加,如果无法成功添加则会安全地返回false。
这也体现了Fail-Fast vs Fail-Safe的设计思想的不同。
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:躁静有徒
- 链接:https://blog.zaojingyoutu.top//article/73b20ff5-1756-47b2-b90a-60d2b9d88a68
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。