List集合中list.remove()返回false原因

时间:2022-08-12 19:27:48

最近公司项目在做购物车功能,购物车里的对象暂时用list集合存储的,当点击删除某个食物时集合的remove(Object)方法一直返回false。具体操作如下
List foods =new ArrayList<>();
Food food1 =newFood();
food1.setId(“101”);
food1.setName(“西湖藕韵”);
food1.setPrice(12);
food1.setUnit(“元/份”);
foods.add(food1);

Food food2 =newFood();
food2.setId(“102”);
food2.setName(“泉水豆腐”+ menuId);
food2.setPrice(8);
food2.setUnit(“元/份”);
foods.add(food2);

当你在调用foods.remove(food2);这个方法之前修改了food2的某个属性(比如数量food2.setCount(2)),foods.remove(food2)返回的值就为false而不是true了。

为了让foods.remove(food2)返回true,去查看了List集合的源码

List集合中list.remove()返回false原因

没发现任何有用信息(其实还是对List的理解的太少,只会使用没明白其实现原理),只好转战Google。不Google不知道,原来list的remove()、contains()这类方法是用equals比较两个对象是否是同一个对象的。知道这一点后,就知道该怎么做了。只需要在Food这个类里重写equals()方法就行了(注意比对的参数不能包含会变化的那些参数,比如count),这里id永远不会变,所以这里只对比id这个参数。

List集合中list.remove()返回false原因

重写了这个参数后,foods.remove(food2)就乖乖的返回true啦。