在一个集合里面往往会保存大量的数据,有时需要判断某个数据是否存在,这时就可以利用迭代的方法进行对象的比较(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()方法。
本文介绍如何在链表中使用equals方法进行数据查询,包括接口定义、节点递归处理及子类覆写,通过具体示例展示了自定义对象查询的实现。
3012

被折叠的 条评论
为什么被折叠?



