关于List集合,这份总结很全面( 三 )


如果有线程安全问题 , 在迭代的过程中 , 会频繁报 ConcurrentModificationException 的错误 , 意思是在我当前循环的过程中 , 数组或链表的结构被其它线程修改了 。
4.6 如何解决线程安全问题?Java 源码中推荐使用 Collections#synchronizedList 进行解决 , Collections#synchronizedList 的返回值是 List 的每个方法都加了 synchronized 锁 , 保证了在同一时刻 , 数组和链表只会被一个线程所修改 , 或者采用 CopyOnWriteArrayList 并发 List 来解决 , 这个类我们后面会说 。
第五章 其它类型题目5.1 说一下双向链表是什么?答:可以把 LinkedList 的结构画出来 , 然后进行如下描述:双向链表中双向的意思是说前后节点之间互相有引用 , 链表的节点我们称为 Node 。 Node 有三个属性组成:其前一个节点 , 本身节点的值 , 其下一个节点 , 假设 A、B 节点相邻 , A 节点的下一个节点就是 B , B 节点的上一个节点就是 A , 两者互相引用 , 在链表的头部节点 , 我们称为头节点 。 头节点的前一个节点是 null , 尾部称为尾节点 , 尾节点的后一个节点是 null , 如果链表数据为空的话 , 头尾节点是同一个节点 , 本身是 null , 指向前后节点的值也是 null 。
5.2 说一下双向链表如何实现新增和删除节点答:
新增:我们可以选择从链表头新增 , 也可以选择从链表尾新增 , 如果是从链表尾新增的话 , 直接把当前节点追加到尾节点之后 , 本身节点自动变为尾节点 。
删除:把删除节点的后一个节点的 prev 指向其前一个节点 , 把删除节点的前一个节点的 next 指向其后一个节点 , 最后把删除的节点置为 null 即可 。
总结【关于List集合,这份总结很全面】List在实际工作中使用频率非常高 。 多学习源代码 , 不仅能够应对面试 , 也能让我们在工作中使用的越来越熟练 。 如果加深对List集合的了解 , 可以研究一下ArrayList集合源码后 , 自己实现一个List集合 。 这样才能对List底层的数据结构和实现细节 , 有更深的理解和更熟练的应用 。