链表中的数据由于存在foot这个成员变量就可以通过索引的形式来进行操作,利用索引就可以实现内容的修改。
1、【ILink】在接口中追加数据修改的方法。
/**
* 修改指定索引中的数据内容
* @param index 要修改的数据索引
* @return data 要替换的新内容
*/
public void set(int index, E data);
2、【Link.Node】在Node类中增加一个索引数据修改的方法。
/**
* 修改指定索引中的数据内容
* @param index 要修改的数据索引
* @return data 要替换的新内容
*/
public void setNode(int index,E data) {
if(Link.this.foot++==index) { //索引相同
this.data=data; //修改数据
}else {
this.next.setNode(index, data);//后续节点继续操作
}
}
3、【Link】在Link子类中覆写set()方法。
@Override
public void set(int index, E data) {
if(index>=this.count) { //索引不在指定范围内
throw new ArrayIndexOutOfBoundsException("不正确的索引");
}
this.foot=0; //重置索引的下标
this.root.setNode(index, data);//Node类修改数据
}
4、【测试类】编写程序实现内容修改
public class LinkDome277 {
public static void main(String[] args) {
ILink<String> link=new Link<String>(); //实例化链表对象
System.out.println("数据保存前链表元素个数"+link.size());
link.add("www.链表数据增加.com"); //链表中保存数据
link.add("www.kkk.cm"); //链表中保存数据
link.add("www.lll.cn"); //链表中保存数据
System.out.println("数据保存后链表元素个数"+link.size());
link.set(1, "www.修改后数据.com"); //修改内容
System.out.println(link.get(1));
Object results []=link.toArray(); //获取全部保存数据
for(Object obj:results) {
String str=(String)obj; //确定为String型,强制转型
System.out.print(str+"、"); //输出对象
}
执行结果
数据保存前链表元素个数0
数据保存后链表元素个数3
www.修改后数据.com
www.链表数据增加.com、www.修改后数据.com、www.lll.cn、
本程序利用了set()方法修改了索引的内容,随后利用get()方法获取索引数据,实质上set()与get()两个方法的实现原理相同。