关键字:链表,数据结构,接口,内部类,泛型,私有属性,构造方法
最近复习了一遍Java的基础知识,正好使用这个算法经典案例来练习一下,接下来代码中会用到大部分的基础知识,作为Java基础的总结。
接口定义所有方法的标准
要求一个IList接口规范需要实现的方法,使用泛型定义类型,要求的实现的方法有:
1.数据增加
2.获取集合个数
3.空集合判断
4.返回集合数据
5.根据索引取得数据
6.修改指定索引数据
7.判断数据是否存在
8.数据删除
9.清空链表
interface IList<E>{
public void add(E data) ;//增加数据
public int getSize() ;//获取集合个数
public boolean isEmpty() ;//判断是否是空集合
public Object[] toArray () ;//获取对象数组
public E getData(int index) ;//通过索引获取数据
public void setData(int index , E data) ;//根据索引修改相应位置的数据
public boolean contains(E data) ;//判断数据是否存在
public void remove(E data) ;//数据删除
public void clean() ;//清空整个链表
}
接口实现类
将链表的节点定义为一个内部类,方便访问其私有属性。
class ListImpl<E> implements IList<E>{
private class Node{
private E data ;
private Node next ;
public Node(E data){
this.data = data ;
}
/**
* 处理外部类提交的新节点,判断root节点之后是否为空;
* 若不为空则循环调用此方法直到找到合适的位置;
* @param newNode [待存放的新节点]
*/
public void addNode(Node newNode){
if(this.next == null)
this.next = newNode ;
else
this.next.addNode(newNode) ;
}
/**
* 将调用此方法的节点的数据传入,外部类中的returnData[]属性
* 如果此节点的next属性不为空则递归调用此方法
*/
public void toArrayNode(){
ListImpl.this.returnData[ListImpl.this.foot++] = this.data ;
if(this.next != null)
this.next.toArrayNode() ;
}
/**
* 外部类中从根节点开始调用此方法;
* 如果此时的脚标与传入的索引值相同就返回此节点的data属性值
* 每次递归调用此方法时将脚标自增1
* @param index [待取得数据的索引值]
* @return data [索引处的数据]
*/
public E getNode