您的位置:首页 > 编程语言 > Java开发

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: