12.9.4返回链表数据

保存在链表中的数据也需要被外界获取,那么此时就可以利用数组的形式返回链表中的保存数据,考虑到此功能的通用性,所以返回的数组类型应该为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实现内容打印

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值