关于List contains方法的一些使用心得

2024-06-16 23:08

本文主要是介绍关于List contains方法的一些使用心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现了一个单链表,尤其是写contains方法的时候陷入了一个瓶颈,该方法对于String, Integer, Float, Double等等数据类型有效,对于对象却无效,我在想是我的实现的代码有问题吗?
代码如下:
/**
 * 判断某个元素是否在链表中
 *  @param  element
  @return  若在即为true,不在即为false
 */
public boolean contains( element) {
    return (getIndexOf(element) != - 1);
}

/**
 * 获取某个元素的索引, 参考双向链接表的实现
 *  @param  element
  @return
  */
public int getIndexOf( element) {
    int index =  0;
    if (element ==  null) {
        for (Node< E> node =  first; node !=  null; node = node. next) {
            if (node. element ==  null) {
                return index;
            }
            index++;
        }
    }
    else {
        for (Node< E> node =  first; node !=  null; node = node. next) {
            if (node. element.equals(element)) {
                return index;
            }
            index++;
        }
    }
    return - 1;
}
发现这里面是没有问题的,我采用的是类似与LinkedList的实现方式,然后再来测试对象的,发现持续报错!于是我又继续测试Java自带的一些List的实现类,试了两个,ArrayList和LinkedList,然后结果就是contains一直显示false!!!
查看了equals最初的源码,也就是所有类的祖先Object类,发现了这个:
public boolean equals(Object obj) {
    return ( this == obj);
}
我很想说huck!!!原来String以及其它几个基本类型都自己实现了equals方法,于是我就想,User类和String都是属于类,他们的实例不是基本类型,所以他们必须得自己单独实现自己的equals方法。
然后下面就是User类:
public class User{

    private int  age;
    private String  name;
    private String  gender;

    public User( int age, String name, String gender) {
        this. age = age;
        this. name = name;
        this. gender = gender;
    }

    public int getAge() {
        return  age;
    }

    public void setAge( int age) {
        this. age = age;
    }

    public String getName() {
        return  name;
    }

    public void setName(String name) {
        this. name = name;
    }

    public String getGender() {
        return  gender;
    }

    public void setGender(String gender) {
        this. gender = gender;
    }

    @Override
    public String toString() {
        return  "User{" +
                "age=" age +
                ", name='" name ' \' +
                ", gender='" gender ' \' +
                '}';
    }

    /**
     * 重写 equals方法
     *  @param  object
      @return
      */
    @Override
    public boolean equals(Object object) {
        if (object  instanceof User) {
            User otherUser = (User) object;
            if ( this. age == otherUser.getAge()
                    &&  this. gender.equals(otherUser.getGender())
                    &&  this. name.equals(otherUser.getName())) {
                return true;
            }
        }
        return false;
    }
}
从最后这个代码可以看出,我们是重载了equals方法,注意重载的时候参数类型一定要相同,否则绝对报错!如果类型以及个数不一样,那就是重写了。这点得非常小心!
然后再测试,一切OK!


这篇关于关于List contains方法的一些使用心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067808

相关文章

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

SpringBoot中ResponseEntity的使用方法举例详解

《SpringBoot中ResponseEntity的使用方法举例详解》ResponseEntity是Spring的一个用于表示HTTP响应的全功能对象,它可以包含响应的状态码、头信息及响应体内容,下... 目录一、ResponseEntity概述基本特点:二、ResponseEntity的基本用法1. 创

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export