12.9.1链表数据增加

链表在进行定义时使用了泛型技术,这样就可以保证每个链表所保存的相同类型的数据,这样既可以避免ClassCastException安全隐患,又可以保证在进行对象比较时的数据类型统一。
链表是多个节点的集合,所以在链表类中为了可以方便的进行所有节点的操作,则需要进行根节点(第一个保存的节点)的保存,每一次增加的新节点都要依照顺序保存在最后一个节点后进行存储。
在这里插入图片描述
1、【ILink】在ILink接口中定义数据增加的方法

	 * 向链表中进行数据的存储,每个链表所保存的数据类型相同,不允许保存null数据
	 * @param e 要保存的数据
	 */
	public void add(E e);
}

2、【Link.Node】每当进行链表数据增加时都需要创建新的Node类对象,并且需要依据引用关系保存Node类对象,此操作可以交由Node类完成,所以在Node类中追加节点保存方法。

	/**
		 * 保存新创建的 节点,保存的依据是判断当前节点的next属性是否为空
		 * @param newNode 要保存的新节点
		 */
		public void addNode(Node<E> newNode) { //保存新的Node数据
			if(this.next==null) {              //当前节点的下一个节点为空
 				this.next=newNode;               //保存当前节点
			}else {
				this.next.addNode(newNode);   //递归到合适的位置保存数据
			}
			
		}
	}

3、【Link】链表实现子类定中定义根节点对象

private Node<E> root;  //保存根节点信息

4、【Link】在子类中覆写ILink接口中定义的add()方法。

@Override
		public void add(E e) {   //方法覆写
			if(e==null) {          //保存的数据为空时
				return;          //方法调用直接结束
			}
			
			//数据本身不具有节点先后的关联特性,要想实现关联处理就必须将数据包装在Node类中
			Node<E> newNode=new Node<E>(e);  //创建一个新的节点
			if(this.root==null) {            //现在没有根节点
				this.root =newNode;           //第一个节点作为根节点
			}else {                           //根节点存在
				this.root .addNode(newNode); //有Node类保存新节点
			}
		}

在Link子类中主要功能是将要保存在链表中的数据包装在Node类对象中,这样就可以利用Node类中所提供的next属性来定义不同Node类对象间的先后关系。在链表实现中最为重要的就是根节点的保存,即通过根节点可以实现所有后续节点的处理,本程序将第一个保存的节点作为根节点。
5、【测试类】在主类中进行链表数据的保存

public class LinkDome277 {
       public static void main(String[] args) {
		 ILink<String> link=new Link<String>();  //实例化链表对象
		 link.add("www.链表数据增加.com");    //链表中保存数据
		 link.add("www.kkk.cm");            //链表中保存数据
		 link.add("www.lll.cn");             //链表中保存数据
	} 
}

在客户端使用时可以利用子类对象的向上转型为ILink父类接口对象实例化,这样就可以直接调用add()方法进行链表数据存储,由于链表了实现了所有节点的创建与引用处理,所以客户端不必关心Node类的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值