课时140:链表(判断数据是否存在)
摘要:在一个集合中往往会保存大量的数据,有时候会需要判断数据是否会存在。我们将使用对象比较的方式( Equals 方法)来实现这个功能。
1. 在 ILink 接口中添加一个判断的方法---contains(E data)`
方法:
Public boolean contains(E data); // 判断数据是否存在
2. 在 Node 类中添加 containsNode(E data)
方法进行依次判断:
public boolean containsNode(E data) { if (this.data.equals(data)) { return true; // 找到匹配的数据 } else { if (this.next == null) { return false; // 没有后续节点,且未找到匹配数据 } return this.next.containsNode(data); // 递归查找下一个节点 } }
3. 在 LinkImpl 类中实现 contains(E data)
方法:
public boolean contains(E data) { if (data == null) { return false; // 如果传入的数据为空,直接返回 false } return this.root.containsNode(data); // 交给 Node 类进行判断 }
4.进行测试
public class LinkDemo { public static void main(String[] args) { ILink<String> all = new LinkImpl<String>(); System.out.println("【增加之前】数据个数:" + all.size()+"、是否为空集合:"+all.isEmpty()); all.add("Hello"); all.add("World"); all.add("MLDN"); all.add(1,"世界"); System.out.println("【增加之后】数据个数:" + all.size()+"、是否为空集合:"+all.isEmpty()); System.out.println("------数据获取的分割线-------"); System.out.println(all.get(0)); System.out.println(all.get(1)); System.out.println(all.get(4)); // 索引超出范围 System.out.println("------数据判断的分割线-------"); System.out.println(all.contains("高")); // 不存在 System.out.println(all.contains("Hello")); // 存在 System.out.println(all.contains(null)); // 传入 null }
结果如下:
由于链表中没有空数据的存在,所以整体的程序判断的时候直接使用一个节点数据发出的Equals()的方法调用即可。如果链表中可能存储 Null 值,那么需要修改 Containsnode 方法,将 this.data.equals(data)
修改为 (this.data == null && data == null) || (this.data != null && this.data.equals(data))
,以正确处理 Null 值的比较。