12.9.7数据内容查询

本文介绍如何在链表中使用equals方法进行数据查询,包括接口定义、节点递归处理及子类覆写,通过具体示例展示了自定义对象查询的实现。

在一个集合里面往往会保存大量的数据,有时需要判断某个数据是否存在,这时就可以利用迭代的方法进行对象的比较(equal()方法)来完成判断。

1、【ILink】在接口中定义数据查询方法

    /**
	 * 查询指定内容是否存在,要求查询对象所在类覆写equals()方法
	 * @param data 要查找的数据
	 * @return 数据存在返回true,否则返回false;
	 */
	public boolean contains(E data);

2、【Link.Node】节点递归处理以及数据判断在Node类中完成。定义以下方法。

        /**
		 * 查询指定内容是否存在,要求查询对象所在类覆写equals()方法
		 * @param data 要查找的数据
		 * @return 数据存在返回true,否则返回false;
		 */
		public boolean containsNode(E data) {
			if(this.data.equals(data)) {            //对象比较
				return true;                         //数据存在
			}else {
				if(this.next==null) {                   //没有后续节点
					return false;                        //没有找到数据
				}else {                                   //后续节点判断
					return this.next.containsNode(data);
				}
			}
		}

3、【Link】在子类中覆写contains()方法。

@Override
		public boolean contains(E data) {
			if(data==null) {
				return false;                    //没有数据,返回false
			}
			return this.root.containsNode(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.println(str+"、");   //输出对象
		 }
		 System.out.println(link.contains("www.lll.cn"));
		 System.out.println(link.contains("wooo"));
		 
		// System.out.println(link.get(1));   //获取第二个元素
		// System.out.println(link.get(3));   //错误的索引
	} 
}

执行结果

数据保存前链表元素个数0
数据保存后链表元素个数3
www.修改后数据.com
www.链表数据增加.com、
www.修改后数据.com、
www.lll.cn、
true
false

在调用contains()方法时,利用的是equals()方法实现对象比较处理。现在如果在链表中保存的是自定义对象,则对象所在的类一定要覆写equals()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值