LinkedList使用大全
下文笔者将从Linkedlist对象的创建、添加、删除、修改操作等一一讲解,如下所示
LinkedList创建
//定义LinkedList 链表结构 LinkedList list = new LinkedList();
LinkedList添加操作
//追加元素到list尾部
list.add("java265.com-1");
//添加元素到list头部
list.addFirst("java265.com-2");
//添加元素到list尾部
list.addLast("java265.com-3");
//添加元素到list的指定下标
list.add(2,"java265.com");
LinkedList删除操作
//删除指定元素
list.remove("java265.com-1");
//删除下标为1的元素
list.remove(2);
//删除头部元素
list.removeFirst();
//删除尾部元素
list.removeLast();
LinkedList元素修改操作
//将下标为2上的元素修改为666 list.set(2,666); System.out.println(list);
LinkedList查询操作
//获取链表长度
int size = list.size();
System.out.println(size);
//判断链表是否为空
boolean empty = list.isEmpty();
System.out.println(empty);
//判断是否有指定元素
boolean b = list.contains("java265.com");
System.out.println(b);
//获取指定下标的元素
Object o = list.get(3);
System.out.println(o);
//获取第一个元素
Object first = list.getFirst()
System.out.println(first);
//获取最最后一个元素
Object last = list.getLast();
System.out.println(last);
LinkedList源码分析
/**
* Constructs an empty list.
*/
public LinkedList() {
}
该类的构造方法内是空的,没有任何的代码。 但是该类中有三个属性。
transient int size = 0; //索引
transient Node<E> first; //第一个元素对象
transient Node<E> last; //表示最后一个元素对象。
================ add的源码=====E:理解为Object类型==========================。
public boolean add(E e) {
linkLast(e);
return true;
}
void linkLast(E e) {
final Node<E> l = last;
//上一个节点 数据 下一个节点
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
==================Node的源码 内部类=======================================
private static class Node<E> { //<E>泛型--object
E item; //数据
Node<E> next; //下一个节点
Node<E> prev; //上一个节点
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
1、==================== get(1)-----获取元素========================
public E get(int index) {
checkElementIndex(index); //检查index下标是否正确。
return node(index).item; //Node对象
}
Node<E> node(int index) {
//>> 位运算二进制运算 ----- size >> 1 一半的意思size/2
if (index < (size >> 1)) { //前半部分
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else { //后半部分
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


