LinkedList是基于双向链表机制,所谓双向链表机制,就是集合中的每个元素都知道其前一个元素和其后的一个元素的位置LinkedList中,以一个内部的 Entry类来代表集合中的元素,元素赋值给element属性,Entry中的next属性指向元素的后一个元素,Entry中的previoous属性指向元素的前一个元素,基于这样的机制可以快速实现集合中元素的移动。
在创建LinkedList对象时,应首先创建一个element属性为null、next属性为null及previous属性为null的Entry对象,并赋值给全局的header属性。
在执行构造器时,LinkedList将header的next及previous都指向header,以形成双向链表所需的闭环。
add(E)
当向LinkedList中增加元素时,要做的就是创建一个Entry对象,并将此Entry对象的next
指向header,previous指向header.orevious。在完成自己的next、previous的设置后,同时
将位于当前元素的后一元素的previous指向自己,并将位于当前元素的前一元素的next指向
自己,这样就保持了双向链表的闭环。
LinkedList的add方法不用像ArrayList那样,要考虑扩容及复制数组的问题,但它每增加一个
元素,都要创建一个新的Entry对象,并要修改相邻的两个元素的属性。
public boolean add(E e) {
linkLast(e);
return true;
}
remove(E)
要删除LinkedList的一个元素,首先同样要遍历LinkedList中的元素,遍历和寻找匹配的元素
的方法和ArrayList基本相同,寻找到相匹配元素后,删除元素的方法比ArrayList简单很多。
删除时只需直接删除链表上的当元素,并将当前元素中的element、previous及next属性设置
为null,即可完成对象的删除。这个动作比ArrayList还要将当前元素所在的位置的元素通过
复制往前移动一位。
public E remove() {
return removeFirst();
}
LinkedList:
LinkedList基于双向链表机制事项;
LinkedList在插入元素时,须创建一个新的Entry对象,并切换相应元素的前后元素的引用;
在查找元素时,须遍历链表;在删除元素时,要遍历链表,找到要删除的元素,然后从链表上
将此元素删除即可;
LinkedList是非线程安全的;