集合框架:ArrayList去重


prtyaa
prtyaa 2023-12-28 17:19:41 50027 赞同 0 反对 0
分类: 资源
需求:如果集合里出现了姓名和年龄都相同的人,就说明是一个人,把重复的去掉

First:首先得定义一个person类。

Second:定义一个对集合去重的类

然后,主函数开始创建集合,给集合里添加person

现在输出一下所有元素的姓名和年龄,发现拿不到姓名,调不出来getName和getAge方法,这是为什么?因为al.add 在添加person的时候 add方法的参数是一个object类型,而add里面添加的是person类型,所以向上转型了。然后循环遍历的时候it.next()拿到的就是object类型,object是父类,不可能有子类独有的getName和getAge方法,所以在记事本里这样掉方法,javac编译出来是失败的,这是多态编译失败。

正确的写法是这样:可以看到打印成功。

然后我们需要调用setPerson方法,给里面传al,然后对al的集合里的person进行去重

咦?这是为什么?我不是去重了吗。为什么结果却没有去重。

那你想一下arraylist知道你要判断的条件吗,并不知道,条件是姓名和年龄都相同。这个代码只是判断存储的对象是否相同,那new出来的person每个对象都不相同啊。所以我们要在person类中重写一下object的equals方法,为什么要重写?因为person继承了object,object的equals方法,就是比较的地址值,而每一个new出来的person的地址值都不一样,所以没意义。所以我们要重写一下equals方法。

然后重新运行main方法,结果就去重了。

有的人说是contains呀,怎么跑到equals了,我来翻一下api,看下图,contains的底层就是equals

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  125
统信桌面专业版【全盘安装UOS系统】介绍  120
银河麒麟桌面操作系统安装佳能打印机驱动方法  111
银河麒麟桌面操作系统 V10-SP1用户密码修改  105
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益209.03元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!