java学习笔记—自定义实现linkedList集合
2012-08-29 17:49
746 查看
/* * 自定义实现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++; //每添加一次长度加1 return 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; } }
相关文章推荐
- 深入学习java集合:LinkedList<E>实现
- 学习笔记_毕向东 Java_集合框架_LinkedList 2014.7.22
- java 集合学习笔记2-ArrayList LinkedList Vector 泛型 增强for 可变参数
- java学习笔记——自定义实现Stack集合
- Java基础知识强化之集合框架笔记29:使用LinkedList实现栈数据结构的集合代码(面试题)
- 深入Java集合学习系列:LinkedList的实现原理
- 深入Java集合学习系列:LinkedList的实现原理
- JAVA学习笔记(十)基于LinkedList实现栈和队列
- Java学习笔记之集合(四):LinkedList集合的特点和常用方法
- java学习笔记--类ArrayList和LinkedList的实现
- Java集合源码学习笔记(五)ArrayList,LinkedList,Vector和Hashtable,HashMap的比较
- Java集合深入学习:LinkedList的实现原理
- Java集合源码学习笔记(三)LinkedList分析
- 深入Java集合学习系列:LinkedList的实现原理
- java集合学习之List(三)以LinkedList为例,debug看下迭代器的实现
- Java学习笔记List集合
- Java 集合深入学习--ArrayList,LinkedList和Vector
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)
- Java学习笔记之LinkedList基本用法
- java.util.LinkedList学习笔记