java学习笔记—自定义实现linkedList集合

来源:互联网 发布:手机word办公软件 编辑:程序博客网 时间:2024/06/07 19:06
/* * 自定义实现linkedList集合结构 */public class MyLinkedList {private Node firstNode; // 永远指向第一个元素private Node lastNode; // 永远指向最后一个元素private int size; //集合的长度// 添加元素public boolean add(Node node) {if (null == node) {throw new IllegalArgumentException("不允许null的Node元素");}if (null == firstNode) {firstNode = node; // 集合中没有元素,就把该元素赋值给第一个元素} else {Node lastNode = getLast();//双向链表lastNode.setNext(node); //指向的下一个元素node.setPrev(lastNode); //指向的上一个元素}lastNode=node; //把新添加的元素赋值给最后一个元素size++; //每添加一次长度加1return true;}//在列表的首部添加元素public void addFirst(Node node){if(node == null){throw new IllegalArgumentException("不允许null的Node元素");}if(firstNode == null){lastNode=node; }else{Node n=getFirst();n.setPrev(node);node.setNext(n);}firstNode=node;size++;}//在列表的末尾添加元素public void addLast(Node node){if(node == null){throw new IllegalArgumentException("不允许null的Node元素");}if(lastNode == null){firstNode=node; }else{Node n=getLast();n.setNext(node);node.setPrev(n);}lastNode=node;size++;}//删除列表中第一个元素public void removeFirst(){Node node=firstNode.getNext();node.setPrev(null);firstNode=node;size--;}//删除列表中最后一个元素public void removeLast(){Node node=lastNode.getPrev();node.setNext(null);lastNode=node;size--;}//删除列表中指定的元素public void remove(int index){if(index < 0 || index >= size){throw new ArrayIndexOutOfBoundsException();}if (null == firstNode) {throw new IllegalStateException("集合中没有元素");}int i=0;Node node=firstNode;if(index == 0){node=node.getNext();node.setPrev(null);firstNode=node;size--;return;}if(index == (size-1)){node=lastNode.getPrev();node.setNext(null);lastNode=node;size--;return;}if(index<size/2){while(i!=index){node=node.getNext();i++;}}else{i=size-1;node=lastNode;while(i!=index){node=node.getPrev();i--;}}Node next=node.getNext();Node prev=node.getPrev();next.setPrev(prev);prev.setNext(next);size--;}/* * 返回此列表中指定位置处的元素(二分法) */public Node get(int index) {if(index < 0 || index >= size){throw new ArrayIndexOutOfBoundsException();}if (null == firstNode) {throw new IllegalStateException("集合中没有元素");}int i=0;Node node;if(index<size/2){node=firstNode;while(i!=index){node=node.getNext();i++;}}else{i=size-1;node=lastNode;while(i!=index){node=node.getPrev();i--;}}return node;}/* * 返回此列表中指定位置处的元素(普通方法) */public Node myGet(int index) {if(index < 0 || index >= size){throw new ArrayIndexOutOfBoundsException();}if (null == firstNode) {throw new IllegalStateException("集合中没有元素");}int i=0;Node node=firstNode;while(i!=index){node=node.getNext();i++;}return node;}/* * 获取最后一个元素 */public Node getLast() {if (null == firstNode) {throw new IllegalStateException("集合中没有元素");}return lastNode;}/* * 获取最后一个元素 */public Node getFirst() {if (null == firstNode) {throw new IllegalStateException("集合中没有元素");}return firstNode;}/* * 获取集合长度 */public int size() {return size;}}


原创粉丝点击