java ee问题,我用map.remove()方法不能删除元素
/***清空所有条目*/publicvoidclear(){map.clear();}上面这个清空功能可以,但是下面这个删除元素就不行。我确定map.remove(bid...
/**
* 清空所有条目
*/
public void clear() {
map.clear();
}
上面这个清空功能可以,但是下面这个删除元素就不行。我确定map.remove(bid)已经执行了,控制台下面都打印了要删除商品的 id,但是不知道为什么这个功能没有执行。添加,清空都可以,就删除不行。
这是整个项目的网盘地址:http://pan.baidu.com/s/1gdm00EJ
连数据库表的创建语句都有了,改下密码就行了,
帮我看看是什么问题
这是我改后的图: 展开
* 清空所有条目
*/
public void clear() {
map.clear();
}
上面这个清空功能可以,但是下面这个删除元素就不行。我确定map.remove(bid)已经执行了,控制台下面都打印了要删除商品的 id,但是不知道为什么这个功能没有执行。添加,清空都可以,就删除不行。
这是整个项目的网盘地址:http://pan.baidu.com/s/1gdm00EJ
连数据库表的创建语句都有了,改下密码就行了,
帮我看看是什么问题
这是我改后的图: 展开
展开全部
大致看了下目前的情况,我估计你大概没理解MAP的数据结构,map是一种以key value形式保存数据的结构,你用的remove方法接收的参数是指map的key值,我怀疑你的这个bid并不是map的key值,而是value值,理由就是map.containsKey(bid);这句话的结果是false,所以你不能直接调用remove方法删除,只能遍历map比较value值:
Iterator it = map.keySet().iterator();
if(it.hasNext()){
Object o = it.next();
if(bid.equals(o)){
it.remove();
}
}
这样应该可以了,不过这不是最好的办法,你应该去看看数据进入map的时候是如何保存的,调用这个delete方法的时候应该传过来的是这个map当时存放的key,这样才比较高效
Iterator it = map.keySet().iterator();
if(it.hasNext()){
Object o = it.next();
if(bid.equals(o)){
it.remove();
}
}
这样应该可以了,不过这不是最好的办法,你应该去看看数据进入map的时候是如何保存的,调用这个delete方法的时候应该传过来的是这个map当时存放的key,这样才比较高效
展开全部
"但是不知道为什么这个功能没有执行"具体指什么? 是执行后map中还存在key为1的商品?
System.out.println(map.size()); // 打印删除前的个数。
System.out.println(map.get(bid)); // 打印为bid的商品,如果为null,说明商品不存在。
map.remove(bid);
System.out.println(map.size()); // 打印删除后的个数.
System.out.println(map.size()); // 打印删除前的个数。
System.out.println(map.get(bid)); // 打印为bid的商品,如果为null,说明商品不存在。
map.remove(bid);
System.out.println(map.size()); // 打印删除后的个数.
更多追问追答
追答
晕死,是不是里面的1是int型,不是String类型?
map.remove(1); 而不是map.remove("1");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在remove前把map的key都打出来,remove后再打一遍出来 对比
更多追问追答
追问
对比什么?都打印过了,要删除的商品id都是 1 +我后面自定义的字符串
追答
那要看map里的值是怎么样的啊,是否存在或相等,还可以进一步,把map里的key都拿来和bid equals 一下看看是否相等 不检查清楚怎么知道问题所在
还可以试一下 map.containsKey(bid )
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-06-18
展开全部
说明map中不存在此对象。。。。。。。。。。。
追问
清空都能清掉了,怎么不存在
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询