课时140:链表(判断数据是否存在)

简介: 在一个集合中往往会保存大量的数据,有时候会需要判断数据是否会存在。我们将使用对象比较的方式( Equals 方法)来实现这个功能。

课时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
    }

结果如下:

image.png

由于链表中没有空数据的存在,所以整体的程序判断的时候直接使用一个节点数据发出的Equals()的方法调用即可。如果链表中可能存储 Null 值,那么需要修改 Containsnode  方法,将 this.data.equals(data)  修改为 (this.data == null && data == null) || (this.data != null && this.data.equals(data)) ,以正确处理 Null 值的比较。

相关文章
|
2月前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
38 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
1月前
课时142:链表(清空链表)
在某些场景下,我们需要一次性清空链表中的所有数据。这个时候就可以通过根元素处理进行控制。只要 Root 设置为空,则后续的节点都不存在。
|
1月前
课时141:链表(数据删除)
1.数据删除的定义 2.在 ILink 接口里面追加新的删除方法 3.后续节点判断 4.完善 LinkImpl 子类中的 remove() 方法
|
1月前
|
索引
课时139:链表(修改指定索引数据)
现在已经可以通过索引来获取链表中的指定数据,既然可以获取数据,那么也就可以实现修改指定索引位置的数据这种常见功能。 本节将介绍如何实现这个功能。
|
1月前
|
存储 索引
课时133:链表实现简介
链表的本质是一种动态的对象数组,它可以存储任意数量的对象。简而言之,我们可以将其视为一种对象数组。 1. 链表简介 2. 链表的实现原理 3. 代码实现中的问题与解决方案
|
10月前
|
存储 缓存
【海贼王的数据航海】链表—双向链表
【海贼王的数据航海】链表—双向链表
44 0
|
10月前
|
存储
【海贼王的数据航海】链表—单链表
【海贼王的数据航海】链表—单链表
58 0
|
11月前
|
C++ Python Java
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
617 0
Python每日一练(20230424) 滑动窗口最大值、栈实现队列、直线上最多的点数
|
11月前
|
存储 缓存 算法
【编织时空四:探究顺序表与链表的数据之旅】(下)
【编织时空四:探究顺序表与链表的数据之旅】
|
10月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表