保存在链表中的数据也需要被外界获取,那么此时就可以利用数组的形式返回链表中的保存数据,考虑到此功能的通用性,所以返回的数组类型应该为Object。
在进行链表数据获取时,应该根据当前链表所保存的集合长度开辟相应的数组,随后利用索引的方式从链表中取得相应的数据并将其保存在数组中。
1、【Link】在接口中追加方法用于返回链表数据。
/**
* 获取链表中的全部内容,该内容将以数组的形式返回
* @return如果链表有内容则返回与保存元素个数相当的数组;如果没有内容保存则返回null;
*/
public Object[] toArray();
2、【Link】在Link子类中定义两个成员属性,用于返回数组声明与数组索引控制。
private int foot; //数组操作脚标
private Object[] returnDate;//返回数据保存
3、【Link.Node】在Node类中追加新的方法,通过递归的形式将链表中的数据保存在数组中。
/**
* 将链表中的全部元素保存到对象数组中
*/
public void toArrayNode() {
//将当前节点的数据取出,保存到returnData数组中,同时进行索引自增
Link.this.returnDate[Link.this.foot++]=this.data;
if(this.next!=null) { //还有下一个数据
this.next.toArrayNode(); //递归调用
}
}
4、【Link】覆写接口中的toArray()方法。
@Override
public Object[] toArray() {
if(this.isEmpty()) { //空集合
throw new NullPointerException("集合内容为空");
}
this.foot=0; //脚标清零
this.returnDate=new Object[this.count]; //根据已有长度开辟数组
this.root.toArrayNode(); //利用Node类进行递归数据获取
return this.returnDate; //返回全部元素
}
5、【测试类】编写测试程序调用toArray()方法
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());
Object results []=link.toArray(); //获取全部保存数据
for(Object obj:results) {
String str=(String)obj; //确定为String型,强制转型
System.out.println(str+"、"); //输出对象
}
}
}
执行结果
数据保存前链表元素个数0
数据保存后链表元素个数3
www.链表数据增加.com、www.kkk.cm、www.lll.cn、
本程序通过链表中的toArray()方法将保存在链表中的数据全部取出,就可以利用foreach实现内容打印