java——ArrayList中contains()方法中的疑问
问题引子:
ist students=newArrayList();
students.add(newStudent("20160800612"));
System.out.println(students.contains(newStudent("20160800612")))
返回FALSE
Student stu=newStudent("123");students.add(stu);System.out.println(students.contains(stu));
返回TRUE
对于以上代码,相信很多人有问题,这种不能靠主管想象力的,,,,我们还是来看后台代码靠谱
按住ctrl键点击contains进入List.class是一个接口,其中有的一个抽象方法 boolean contains(Object o);
他实际上调用的contains方法是ArrayList类中重新的contains方法
publicboolean contains(Object o) {returnindexOf(o) >= 0;
}
按住ctrl键点击indexOf进入ArrayList类中indexOf方法
publicint indexOf(Object o) {if(o ==null) {for(inti = 0; i < size; i++)if(elementData[i]==null)return i;
} else {for(inti = 0; i < size; i++)if (o.equals(elementData[i]))return i;
}return-1;
}
我们看到Object o会调用equals方法,但是Student中并没有重新equals方法,所以最后调用的事Object 中的equals方法
publicboolean equals(Object obj) {return(this== obj);
}
很明显,this==obj比较的事地址,所以两个new的对象地址肯定不是一样的,所以返回false
懂了吧~~~~~~~~~~~~~
所以还是多分析分析后台代码,更加清楚明白啦
怎么解决这个问题呢,就是在Student类中重写这个 equals方法,比较的时候去比较id 但是注意重写时参数是Object 我们需要下转型,这个时候要判断Object是否为Student
@Overridepublicboolean equals(Object obj) {if(objinstanceof Student) return((Student)obj).id.equals(this.id);returnfalse;
}
比较两个List里内容相同的元素内存地址的方法
java——ArrayList中contains()方法中的疑问相关推荐
- java分布式对象——远程方法中的参数和返回值+远程对象激活
[0]README 1)本文文字描述转自 core java volume 2, 旨在学习 java分布式对象--远程方法中的参数和返回值+远程对象激活 的相关知识: [1]远程方法中的参数和返回值 ...
- java 方法重载 应用举例,Java 实例 - 重载(overloading)方法中使用 Varargs
以下实例演示了如何在重载方法中使用可变参数:/* author by w3cschool.cc Main.java */public class Main { static void vaTest(i ...
- Jvm处理Java Thread 的run方法中抛出异常的流程
Jvm处理Java Thread 的run方法中抛出异常的流程 参考文章: (1)Jvm处理Java Thread 的run方法中抛出异常的流程 (2)https://www.cnblogs.com/ ...
- java arraylist 方法返回值,Java ArrayList get() 使用方法及示例
Java ArrayList get() 使用方法及示例 Java ArrayList get()方法返回指定位置存在的元素. get()方法的语法为: arraylist.get(int index ...
- numpy中amin()方法中维度axis=0 1 2 的理解
https://www.jianshu.com/p/6f58d7f39147 numpy中amin()方法中维度axis=0 1 2 的理解 axis=0 从最外一层的维度来比较 (对半比较 虽然 ...
- Spring中RedisTemplate方法中,redis相关操作笔记。[redis生成指定长度自增批次号,删除、设置过期时间等]
Spring中RedisTemplate方法中,redis相关操作笔记. redis获取自增批次号 // opsForValue()生成long UUID = redisTemplate.opsFor ...
- java 垃圾回收 null_java方法中把对象置null,到底能不能加速垃圾回收
今天逛脉脉,看见匿名区有人说java中把对做置null,这种做法很菜,不能加速垃圾回收,但是我看到就觉得呵呵了,我是觉得可以加速置null对象回收的. 测试的过程中,费劲的是要指定一个合理的测试堆大小 ...
- java 父类this_java父类方法中使用this,可以把this强转为子类对象,然后调用子类的实例方法,怎么解释?...
1.代码如下 父类代码: public class A { public void a(){ B b=(B)this; System.out.println(b.getNum()); System.o ...
- Java如何在main方法中实例化内部类对象
今天我在实例化一个类是编译器报以下错误: No enclosing instance of type Person is accessible. Must qualify the allocation ...
- java arraylist指定容量_Java中的ArrayList的容量
List接口的大小可变数组的实现.实现了全部可选列表操做,并容许包括 null 在内的全部元素. ArrayList继承于List接口,除继承过来的方法外,还提供一些方法来操做内部用来存储列表的数组的 ...
最新文章
- 谷歌又有手机黑科技:进入办公室就变静音,遇车祸自动报警
- LeetCode 第 36 场双周赛(304/2204,前13.8%)
- 如何把本地yum源给其他机器使用_配置本地yum源以及第3方软件仓库的搭建
- 一道信号量的问题---卖火车票
- OAuth2.0 授权码认证方式使用流程
- Django中urls参数传递
- servlet的url-pattern匹配规则详细描述
- linux编译 mb_string,linux mb()/rmb()/wmb()
- linux命令整理(三)
- 计算机网络路由器作用是什么,路由器的作用是什么? 猫和路由器的区别分析【图文】...
- 计算机组成原理例题4.2,4.2.2 例题解析(1)
- linkedin数据获取策略
- 去掉word 2007中可恶的信息检索
- CSDN博客论坛——读好书,畅想“我的IT成长路”活动【已完成】
- 数据分析中常见的存储方式
- 【JavaScript】阶段性复习
- 智慧工地系统包括哪些部分
- C# 完成WebSocket demo 用GoEasy实现Hello world
- UTL_HTTP read_text和read_raw应用
- 关于使用讯搜(xunsearch)过程中遇到的坑