LinkedList源码分析(三)

时间:2022-10-10 11:01:47

LinkedList源码分析(三)

???? 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家

???? 擅长领域:全栈工程师、爬虫、ACM算法

???? 公众号:知识浅谈

LinkedList源码分析(三)总结 正菜来了⛳⛳⛳

????LinkedList源码函数

????boolean contains(Object o)

含义:这个函数的意思就是查看对象o是不是在linkedList中存在,存在了就返回true,否则就返回false。

public boolean contains(Object o) {
return indexOf(o) != -1;
}

可以看到函数中调用了indexOf(o)这个函数,这个函数的意思是查找o对象在linkedlist中的位置,我们接着往下看

????int indexOf(Object o)

含义:这个函数的作用就是从列表中查找对应存在的值是否有等于o的,如果没有返回-1,有的话返回第一次出现和o相同元素的索引,可以看到在最开始有一个判断,判断o是不是为空,如果不为空,使用equals方法,如果o为空,使用==符号。

public int indexOf(Object o) {
int index = 0;
if (o == null) {
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null)
return index;
index++;
}
} else {
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item))
return index;
index++;
}
}
return -1;
}

????int lastIndexOf(Object o)

含义:返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回 -1。更正式地说,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最高索引 i,如果没有这样的索引,则返回 -1。

public int lastIndexOf(Object o) {
int index = size;
if (o == null) {
for (Node<E> x = last; x != null; x = x.prev) {
index--;
if (x.item == null)
return index;
}
} else {
for (Node<E> x = last; x != null; x = x.prev) {
index--;
if (o.equals(x.item))
return index;
}
}
return -1;
}

????E peek()

含义:检索但不删除此列表的头部(第一个元素),如果第一个元素为空,则就返回null。

public E peek() {
final Node<E> f = first;
return (f == null) ? null : f.item;
}

????E element()

含义:这个和上边的这个有点区别,就是返回第一个元素,但是是调用getFirst()函数,这个函数中会先判断第一个元素是不是null,如果是null,就抛出异常,否则就返回第一个元素。

public E element() {
return getFirst();
}

????E poll()

含义:这个函数是用于删除第一个元素的,如果第一个元素为空的话直接返回null,也就是表示删除的元素,否则的话,就调用unlinkFirst(f) 返回f这个头节点并把头节点first指向其下一个节点。

public E poll() {
final Node<E> f = first;
return (f == null) ? null : unlinkFirst(f);
}

????E remove()

含义:移除列表中的第一个元素,函数中调用了removeFirst函数,这个函数中会先判断是不是第一个是null,是null的话就会抛出异常,否则就会把first指向的元素的下一个用first指向。

public E remove() {
return removeFirst();
}

????offer(E e)

含义:offer(E e) 就是在原来的list列表上添加一个元素e,其内部还是调用的add(e)函数来实现的。

public boolean offer(E e) {
return add(e);
}

????offerFirst(E e)

含义:offerFirst(E e) 就是在原来的list列表的第一个位置上添加一个元素e,其内部还是调用的addFirst(e)函数来实现的。

public boolean offerFirst(E e) {
addFirst(e);
return true;
}

????总结

以上是关于LinkedList源码函数分析解读总结,希望对你有所帮助。