list集合去重_集合框架:ArrayList去重

需求:如果集合里出现了姓名和年龄都相同的人,就说明是一个人,把重复的去掉

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

01b0fe99d6679b76a18971cdd9495511.png

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

0466be50bf1ad3c99a4ecd23219c6e33.png

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

9db1dc6d154eaa322bc91eb546b844e9.png

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

942a795c253c057924ccc3ac2f72786a.png

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

2efd5d6fcbf9dc8d24982da67337bccd.png

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

78120b91c40e3c9a49419f791722e979.png

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

b4c8f5c66e19aee0d5a6e4f9e6bdcfb8.png

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

c103ef9236450640ad28777f73906bb2.png

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

977a423dab156fda40df5486b96400a0.png

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

3ddeb4e304baf0f64e84ac0631af78e2.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值