List的equals方法学习
之前没有了解过这个方法,初次在项目中看到它的时候还以为是在比较两个List的地址,后来看了源码才知道了这个方法的作用。
首先看一个例子:
public class Test{public static void main(String[] args){ArrayList<String> str1 = new ArrayList<String>();str1.add("123");ArrayList<String> str2 = new ArrayList<String>();str2.add("123");System.out.println(str1.equals(str2));}
}
程序输出结果为True。很显然List重写了equals方法。
ArrayList、Vector两者都实现了List接口、继承AbstractList抽象类,其equals方法是在AbstractList类中定义的,源代码如下:
public boolean equals(Object o) { if (o == this) return true; // 判断是否是List列表,只要实现了List接口就是List列表if (!(o instanceof List)) return false; // 遍历list所有元素ListIterator<E> e1 = listIterator();ListIterator e2 = ((List) o).listIterator(); while (e1.hasNext() && e2.hasNext()) {E o1 = e1.next();Object o2 = e2.next(); // 有不相等的就退出if (!(o1==null ? o2==null : o1.equals(o2))) return false;} // 长度是否相等return !(e1.hasNext() || e2.hasNext());
}
从源码可以看出,List的equals方法并不关心List的具体实现类,只要是实现了List接口,并且所有元素相等、长度也相等的话就表明两个List是相等的。
在比较两个对象是否相同时使用的equals方法,所以对象需要重写equals方法和hashCode方法。String已经重写了equals和hashCode方法,所以例子中才会返回true。
List的equals方法学习相关推荐
- JavaSE学习总结(八)常用类(上)Object类==与equals方法的区别浅克隆的特点Scanner类String类String两种创建对象方式的区别String类的各种功能
JavaSE学习总结(八)常用类(上)/Object类/==与equals方法的区别/浅克隆的特点/Scanner类/String类/String两种创建对象方式的区别/String类的各种功能 常用 ...
- 【宋红康学习日记11】Object类与equals方法
1 == (1)当对象是基本数据类型时,比较值: (2)当对象是引用型时,比较的是地址值!!1 2 equals():只处理引用型数据:Object类中的equals方法依然比较的是地址值! 但在St ...
- Java基础学习总结(1)——equals方法
2019独角兽企业重金招聘Python工程师标准>>> 一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 1 package cn.galc.test; 2 3 ...
- 《Java 核心技术卷1 第10版》学习笔记------Object类的 equals 方法
Object 简述 Object 类是 Java 中所有类的始祖, 在 Java 中每个类都是由它扩展而来的. 在 Java 中, 只有基本类型 ( primitive types) 不是对象, 例如 ...
- Java培训教程:”==“和 equals 方法究竟有什么区别?
在学习java技术过程中,我们会接触到一些变量值的相关知识,本期小编为大家介绍的教程就是关于"=="和 equals 方法究竟有什么区别?来看看下面的详细介绍. Java培训教程: ...
- 为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! BigDecimal,相信对于很多人来说都不陌生,很多人都 ...
- 为什么使用HashMap需要重写hashcode和equals方法_为什么要重写 hashcode 和 equals 方法?...
1. 通过Hash算法来了解HashMap对象的高效性 2. 为什么要重写equals和hashCode方法 3. 对面试问题的说明 <Java 2019 超神之路> <Dubbo ...
- hashcode相等的两个对象一定相等吗_为什么重写 equals方法时一定要重写hashCode方法?...
推荐阅读: 一线架构师总结SpringBoot,Cloud,Nginx与Docker,不信你搞不懂 47天洒热血复习,我终于"挤进"了字节跳动(附面经+学习笔记) 五年时间,从蘑菇 ...
- Equals方法与==运算符的使用
为提高代码的执行效率,最近又学习了一下.NET的基础知识,现就发表一下个人理解,有不对之处还望各位指正. C#中的类型分为两种:值类型和引用类型.在处理程序中,不管是值类型还是引用类型,就Equals ...
最新文章
- 126. 最大的和【思维 前缀和】
- 【struts2】文件上传下载—struts2实现
- Python 黑帽子第二章运行截图
- sql 删除字段中下划线_SQL基础教程知识点总结
- ui测试怎么做?依据文档有哪些_微信小程序开发流程有哪些?各个环节注意事项...
- Redis 基础——五大类型与数据结构
- linux判断改行符_Linux判断符如何使用?
- B2C网站运营核心数据分析模型
- mod_signalwire.c:371 Curl Result 1, Error: Protocol https not supported
- 凸优化第四章凸优化问题 4.7向量优化
- 钢铁雄心II HOI2 作弊码合辑
- 网络信息安全攻防实验室 脚本关第二关
- matlab xticklabel 旋转,在Matlab中,如何实现xticklabel的旋转?转
- 涨握在线|欧或重启QE;英市港市合并!
- meta标签属性及其功能
- [受限玻尔兹曼机] 原理、求解过程推导、深度信念网络
- 华为设备配置Smart Link负载分担
- java ant解压缩_java ant包中的org.apache.tools.zip实现压缩和解压缩实例详解
- Springboot注解@ServletComponentScan和@ComponentScan
- JS中childNodes,firstChild,firstElementChild和children使用分析