我是靠谱客的博主 精明过客,最近开发中收集的这篇文章主要介绍java提高篇之LinkedList的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本篇的目的主要是自己去实现双向链表以能够更好的理解LinkedList。

首先定义一个Node类

package com.wonglar.linkedlist;
public class Node {
//前一个结点
private Node previous;
//结点中的对象
private Object obj;
//后一个结点
private Node next;
public Node() {
}
public Node(Node previous, Object obj, Node next) {
this.previous = previous;
this.obj = obj;
this.next = next;
}
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}

具体实现

package com.wonglar.linkedlist;
public class ImplLinkedList {
// 第一个结点
private Node first;
// 最后一个结点
private Node last;
// 链表中元素个数
private int size;
/**
* 向链表中添加元素
*
* @param obj
*
:待添加的元素
*/
public void add(Object obj) {
Node n = new Node();
if (first == null) {
n.setPrevious(null);
n.setObj(obj);
n.setNext(null);
// 当链表中一个元素都没有的时候
// 添加一个元素,这个元素即是第一个元素,又是最后一个元素
first = n;
last = n;
} else {
// 当链表中有元素了,即往last后面添加
n.setPrevious(last);
n.setObj(obj);
n.setNext(null);
// 此时last已不是最后一个元素
last.setNext(n);
// 将新添加的元素置为last
last = n;
}
size++;
}
/**
* 通过索引得到元素
*
* @param index
*
:待得到元素的索引
* @return
*/
public Object get(int index) {
rangeCheck(index);
Node temp = first;
for (int i = 0; i < index; i++) {
temp = temp.getNext();
}
return temp.getObj();
}
/**
* 根据索引,修改元素的值
*
* @param index
*
:待修改元素索引
* @param element
*
:修改后的元素的值
*/
public void set(int index, Object element) {
rangeCheck(index);
Node temp = first;
for (int i = 0; i < index; i++) {
temp = temp.getNext();
}
temp.setObj(element);
}
/**
* 根据索引删除链表中的元素
*
* @param index
*
:待删除元素的索引
* @return :删除掉的元素值
*/
public Object remove(int index) {
rangeCheck(index);
Node temp = this.first;
Node last = this.last;
// 如果删除第一个元素,需要将第一个元素的指向后一个结点的值设为null
// 将它的下一个元素的指向头一个结点的值设为null,然后将第二个元素赋于first
if (index == 0) {
Node down = temp.getNext();
down.setPrevious(null);
first.setNext(null);
first = down;
} else if (index == size - 1) {
temp = last;
Node up = last.getPrevious();
last.setPrevious(null);
up.setNext(null);
this.last = up;
} else {
for (int i = 0; i < index; i++) {
temp = temp.getNext();
}
Node up = temp.getPrevious();
Node down = temp.getNext();
up.setNext(down);
down.setPrevious(up);
}
size--;
return temp.getObj();
}
/**
* 根据元素值删除链表中的元素
* @param o
:待删除的元素
* @return
:是否删除成功
*/
public boolean remove(Object o){
Node temp = this.first;
if(o==null){
for (int index = 0; index < this.size; index++) {
if(temp.getObj()==null){
//执行删除操作
remove(index);
return true;
}
temp = temp.getNext();
}
}else{
for (int index = 0; index < this.size; index++) {
if(temp.getObj().equals(o)){
remove(index);
return true;
}
temp = temp.getNext();
}
}
return false;
}
/**
* 检查索引是否越界
*
* @param index
*/
private void rangeCheck(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("索引越界异常:index:" + index + ",size:" + size);
}
}
/**
* 返回链表中元素个数
*
* @return
*/
public int size() {
return size;
}
}

最后

以上就是精明过客为你收集整理的java提高篇之LinkedList的实现的全部内容,希望文章能够帮你解决java提高篇之LinkedList的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部