list的contains()的问题

dukuizhen 2010-03-19 11:19:42
我的actionform中有一个属性是vipid,我从后台得到了vip会员表中的vipid,保存在list中,使用list.contains(vipid)的方法来验证提交的vipid是否存在于vip会员表中,可是就是一直返回false,哪里有问题呢?
...全文
557 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
janwin 2010-12-28
  • 打赏
  • 举报
回复
我也为这个问题头疼这
xinzhifan4 2010-03-19
  • 打赏
  • 举报
回复
学习了
。。。。。
  • 打赏
  • 举报
回复
我从后台得到了vip会员表中的vipid,保存在list中

----------------------------------------------------
为什么要这样做?

我认为直接用用户输入的那个 vipid 去查数据库不就行了么?能找到就是存在,找不到就是不存在。

另:就算要存放到集合中,也请不要存放在 List 中,应该存放在 HashSet 中。HashSet 的查询速度远远高于 List。
dukuizhen 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 awusoft 的回复:]
这个问题不一定是内存块的问题,经查ArrayList的contains方法:

Java code

public boolean contains(Object elem) {
return indexOf(elem) >= 0;
}
public int indexOf(Object elem) {
if (elem == null) {
……
[/Quote]
多谢楼上的提醒,我发现了我的表单得到的vipid为string类型,而数据库中定义的类型为int,把类型转换下酒OK啦
awusoft 2010-03-19
  • 打赏
  • 举报
回复
这个问题不一定是内存块的问题,经查ArrayList的contains方法:

public boolean contains(Object elem) {
return indexOf(elem) >= 0;
}
public int indexOf(Object elem) {
if (elem == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (elem.equals(elementData[i]))
return i;
}
return -1;
}



这里已经是调用.equals方法了,如果楼主放的都是String或者Integer应该是没问题的.看看是不是多了空格什么的.或者list.contains(vipid)写成了:list.contains("vipid");
Ark032425 2010-03-19
  • 打赏
  • 举报
回复
你传进去的是另外一个对象,不是你装进list那个对象
sdycczp 2010-03-19
  • 打赏
  • 举报
回复


[Quote=引用 1 楼 xyz20003 的回复:]
因为两个属性并非为同一个实例,在内存中驻留不同的空间。

最简单的办法,就是写一个工具方法,遍历list,通过equals()方法进行判断

boolean result = false;
for (String str : list) {
if (str.equals(vipid)) {
result = true;
break;
}
}
[/Quote]


对。就是这样啊,不要把堆栈迷糊了
villagehead 2010-03-19
  • 打赏
  • 举报
回复
召唤代码

good luck
临远 2010-03-19
  • 打赏
  • 举报
回复
因为两个属性并非为同一个实例,在内存中驻留不同的空间。

最简单的办法,就是写一个工具方法,遍历list,通过equals()方法进行判断

boolean result = false;
for (String str : list) {
if (str.equals(vipid)) {
result = true;
break;
}
}
sirtener 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xyz20003 的回复:]
因为两个属性并非为同一个实例,在内存中驻留不同的空间。

最简单的办法,就是写一个工具方法,遍历list,通过equals()方法进行判断

boolean result = false;
for (String str : list) {
if (str.equals(vipid)) {
result = true;
break;
}
}
[/Quote]

大体是这样的

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧