title: 【学习之路】LinkedList封装
draft: true
tags:
- 学习之路
- Java
- 集合
categories: - JavaSE
- 集合
cover: https://cdn.jsdelivr.net/gh/CodeZixuan/Blog_Images/91012893-6fa6e180-e619-11ea-9e98-9ceaf534d0ce.jpg
abbrlink: 1910
date: 2020-06-20 21:10:30
首先新建一个类为LinkedBox
创建静态一个内部类Node
定义三个属性,并且通过构造方法进行初始化
private static class Node{//首节点private Node<E> prev;//元素private E item;//尾结点private Node<E> next;public Node(Node<E> prev, E item, Node<E> next){this.prev = prev;this.item = item;this.next = next;}}
在LinkedBox类中定义三个属性
public class LinkedBox<E>{//首节点private Node<E> first;//尾结点private Node<E> last;//有效元素个数private int size;}
LinkedBox添加方法
public boolean add(E e){linklast(e);return true;}private void linklast(E e){Node<E> l = last;//l将尾结点给当前添加元素作为首节点//e为当前添加的元素//null表示添加在链表末尾,末尾没有元素先设置为空Node<E> newNode = new Node<E>(l, e, null);//当前链表的尾结点给lastlast = newNode;//判断尾结点是否为空,如果为空代表newNode就是首节点,当前元素也是首节点if (l == null)first = newNode;else//如果不是首节点,就把newNode给上一个元素的尾结点l.next = newNode;//有效元素个数加1size++;}
LinkedBox删除方法
public E remove(int index){//开始方法前先判断index是否合法indexException(index);return unlike(node(index));}//新建一个类定义一个异常public class BoxIndexOutOfBoundsException extends RuntimeException{public BoxIndexOutOfBoundsException(){}public BoxIndexOutOfBoundsException(String msg){super(msg);}}//用来判断index是否越界private void indexException(int index){if (index < 0 || index > size - 1){throw new BoxIndexOutOfBoundsException("Index:"+ index +",Size:"+ size);}}//用来查找index的位置private Node<E> node(int index){//判断index是否小于size / 2如果小于从前面开始找index的值,不小于从后面找index的值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;}}//删除前后的node链接private E unlink(Node<E> x){//先将查找到的node对象分别存储E elemet = x.item;Node Node<E> = x.prev;Node Node<E> = x.next;//判断当前对象首节点是否为空,如果为空那么代表删除的元素是第一个元素if (prev == null){//将下一个node对象给firstfirst = next;}else {//把尾结点对象给上一个节点的尾结点prev.next = next;x.prev = null;}//判断当前对象是否为空,如果为空那么代表删除的元素是最后一个元素if (next == null){//将上一个对象node给lastlast = prev;}else {//把当前删除对象的首节点给下一个对象的首节点next.prev = prev;x.next = null;}x.item = null;//清空当前元素size--;//将有效元素个数减少一个return elemet;}
LinkedBox修改方法
public boolean upDate(int index, E value){//先判断index是否合法indexException(index);node(index).item = value;return true;}//用node方法来查找元素private Node<E> node(int index){//判断index是否小于size / 2如果小于从前面开始找index的值,不小于从后面找index的值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;}}
LinkedBox查询方法
public E getElementDate(int index) {//先判断index是否合法indexException(index);return node(index).item;}//调用node方法查询元素private Node<E> node(int index){//判断index是否小于size / 2如果小于从前面开始找index的值,不小于从后面找index的值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;}}
