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; } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。