内容随时更新,最大程度的分析每个方法
List
3、LinkedList
LinkedList是基于双向链表的数据结构进行实现的,储存的数据在物理空间上可以是不连接的,意味着该链表的查找速度慢,不过修改和插入数据
基本用法:
@Test
public void linkedListTest() {
//使用空参构造方法创建LinkedList集合
LinkedList<Integer> objects = new LinkedList<Integer>();
//储存1~10的数据
for (int i = 0; i < 10; i++) {
objects.add(i + 1);
}
//取出数据
for (int i = 0; i < 10; i++) {
System.out.print(objects.get(i)+" ");
}
}
构造方法:
查看源码可以知道,创建一个LinkedList集合有两种方式
方法源码:
boolean | add(E e) 将指定元素添加到此列表的结尾。 |
void | add(int index, E element) 在此列表中指定的位置插入指定的元素。 |
boolean | addAll(Collection<? extends E> c) 添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。 |
boolean | addAll(int index, Collection<? extends E> c) 将指定 collection 中的所有元素从指定位置开始插入此列表。 |
void | addFirst(E e) 将指定元素插入此列表的开头。 |
void | addLast(E e) 将指定元素添加到此列表的结尾。 |
查看add源码
/**
* Appends the specified element to the end of this list.
*
* <p>This method is equivalent to {@link #addLast}.
*
* @param e element to be appended to this list
* @return {@code true} (as specified by {@link Collection#add})
*/
public boolean add(E e) {
linkLast(e);
return true;
}
add实际上在里面调用了linkLast()方法进行数据的储存操作,跟进linkLast()源码
/**
* Links e as last element.
*/
void linkLast(E e) {
final Node<E> l = last;//last是指定最后一个结点的指针,而l是一个是一个移动的指针,进行链表的连接作用
final Node<E> newNode = new Node<>(l, e, null);//创建一个结点,并储存传入进来的数据e,下一个结点指向空指针,上一个结点指定l结点
last = newNode;//将last指向最后一个结点,即newNode结点
if (l == null)
first = newNode;//给头指针进行赋值操作,如果头指针是空的,则进行赋值操作
else
l.next = newNode;//连接下一个结点
size++;
modCount++;
}
结论:通过查看add源码可知,LinkedList低层是一个双向链表