社区
Java SE
帖子详情
set的contains方法???
sAS112UUUYY111
2010-04-20 11:10:40
Test a=new Test(new jdbcthin());
Test b=new Test(new jdbcthin());
Set<Test> abc=new HashSet<Test>();
abc.add(a);
System.out.println(abc.contains(b));
结果如何变成true吗?
...全文
495
13
打赏
收藏
set的contains方法???
Test a=new Test(new jdbcthin()); Test b=new Test(new jdbcthin()); Set abc=new HashSet(); abc.add(a); System.out.println(abc.contains(b)); 结果如何变成true吗?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sAS112UUUYY111
2010-04-20
打赏
举报
回复
原因是jdbcthin()没有重写equal()
谢谢了。
zhang2chenggong
2010-04-20
打赏
举报
回复
重写hashcode,可以调用hashcode,对吧?
soli11722984
2010-04-20
打赏
举报
回复
你可以试下,直接在equals里返回true,就会有效果了
具体怎么写,要根据你的业务需求
sAS112UUUYY111
2010-04-20
打赏
举报
回复
我重写了但是在调用contains()时,没有调用equal方法?
sAS112UUUYY111
2010-04-20
打赏
举报
回复
[Quote=引用 3 楼 michaellufhl 的回复:]
override
Java code
Test.equals(), Test.hashCode()
[/Quote]
如何重写,请指教
sAS112UUUYY111
2010-04-20
打赏
举报
回复
上面的看起来有点乱,所以再发一遍。
private boolean validate(HttpServletRequest request, Action action, ActionMapping mapping)
{
Method currentMethod = getCurrentMethod(request, action, mapping);//得到当前执行的action方法
if(currentMethod!=null && currentMethod.isAnnotationPresent(Permission.class)){
Permission permission = currentMethod.getAnnotation(Permission.class);
SystemPrivilege privilege = new SystemPrivilege(new SystemPrivilegePK(permission.model(), permission.privilegeValue()));
Employee employee = WebUtil.getEmployee(request);
for(PrivilegeGroup p : employee.getGroups()){
if(p.getPrivileges().contains(privilege)) return true;
}
return false;
}
return true;
}
这段程序就可以返回true,p.getPrivileges()是hashset类型。
michaellufhl
2010-04-20
打赏
举报
回复
override
Test.equals(), Test.hashCode()
sAS112UUUYY111
2010-04-20
打赏
举报
回复
private boolean validate(HttpServletRequest request, Action action, ActionMapping mapping) {
Method currentMethod = getCurrentMethod(request, action, mapping);//得到当前执行的action方法
if(currentMethod!=null && currentMethod.isAnnotationPresent(Permission.class)){
Permission permission = currentMethod.getAnnotation(Permission.class);
SystemPrivilege privilege = new SystemPrivilege(new SystemPrivilegePK(permission.model(), permission.privilegeValue()));
Employee employee = WebUtil.getEmployee(request);
for(PrivilegeGroup p : employee.getGroups()){
if(p.getPrivileges().contains(privilege)) return true;
}
return false;
}
return true;
}
这段程序就可以返回true,p.getPrivileges()是hashset类型。
soli11722984
2010-04-20
打赏
举报
回复
重写Test的equals
zfq642773391
2010-04-20
打赏
举报
回复
[Quote=引用 9 楼 sas112uuuyy111 的回复:]
原因是jdbcthin()没有重写equal()
谢谢了。
[/Quote]
只重写equal()应该不行
你用的是HashSet的contains(Object o)方法,HashSet内部是由HashMap实现的,HashSet的contains(Object o)方法会调用HashMap的containsKey(Object key),containsKey(Object key)会调用HashMap的getEntry(key)方法,getEntry(key)使用hashcode来区分对象的
hashCode 的常规协定是:
在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
最好同时重写equal和hashCode
yugong2009
2010-04-20
打赏
举报
回复
使用HashSet要重写Test的equals()和hashCode(),并根据情况重写jdbcthin的equals()方法
我认为与hash有关的容器,都必须重写equals()和hashCode(),
在其它情况中,重写equals()也最好重写hashCode()方法,以免发生类似LZ的错误
List与
Set
的
contains
方法
效率
会对这个产生疑问是因为最近在leetcode刷BFS的时候,不止一次发现,若在遍历时用List.
contains
()判断常常会超时,但是将list转为
Set
的情况下就能ac;于是猜想是否
Set
的
contains
()效率要比List要高 网上搜索发现有人做实验,相同的10000个元素,用
contains
进行判断,
Set
用了1000ms,List用了19wms,不过没讲原因于是去查看源码 对于List而言,这里以LinkedList为例,其
contains
()
方法
: public boolean con
Java中
Set
的
contains
()
方法
Java中
Set
的
contains
()
方法
—— hashCode与equals
方法
的约定及重写原则 最近写项目的时候遇到了这个问题,就是我在一个ArrayList里放了一个很多个vo,每当我要在里面添加vo的时候,我都要判断一下,这个list里是否已经存在,若是存在,则不添加。虽然知道是用
contains
()
方法
,但用了之后发现一直都是false,就是无论怎么判断都是会插进去。 为了解决这个问题,看了很多相关的博文,感觉这篇翻译的文章真的解决了问题,文章后面附着我最后是如何解决的。 因为解决contain
java
set
contains
_Java中
Set
的
contains
()
方法
Java中
Set
的
contains
()
方法
—— hashCode与equals
方法
的约定及重写原则翻译人员: 铁锚翻译时间: 2013年11月5日原文链接: Java hashCode() and equals() Contract for the
contains
(Object o) Method of
Set
本文主要讨论 集合
Set
中存储对象的 hashCode 与 equals
方法
应遵...
Android ImageView动态更新图片自定义监听
源码下载地址: https://pan.quark.cn/s/07e7935aff27 在Android应用开发过程中,`ImageView`作为一个基础组件被广泛运用,其主要功能是展示各种图像资源,这些资源可以来源于本地存储或通过网络获取。本文将详细阐述如何动态地变更`ImageView`所显示的图片内容,并借助自定义监听机制来监控和干预图片的加载流程。此类技术在应用开发中具有很高的实用价值,特别是在处理网络用户头像、商品展示图以及实时数据更新的场景下。 我们首先需要明确`ImageView`的基本操作方式。在Android平台,我们常通过`
set
ImageResource()`、`
set
ImageBitmap()`以及`
set
ImageDrawable()`等函数来设定`ImageView`的图像内容。然而,这些
方法
主要适用于已加载至内存中的图像文件,对于网络图片,则需要借助更为复杂的处理逻辑。 在实现动态下载并更新`ImageView`中的图像时,我们普遍采用`AsyncTask`或`Loader`来执行后台任务,以此防止主线程被阻塞。本文将重点介绍自定义监听器的构建
方法
。自定义监听器能够让我们依据图片加载的进程或状态来执行特定的任务,例如显示加载进度指示器或处理加载失败的情况。 自定义监听器通常定义为一个接口,其中包含了若干个回调
方法
,例如`onStart()`、`onProgressUpdate()`、`onSuccess()`、`onError()`等。以下是一个示例接口定义: ```java public interface ImageDownloaderListener { void onStart(); void onProgress(int ...
投资融资创业项目计划书增资扩股商业计划书草案ppt38
投资融资创业项目计划书增资扩股商业计划书草案ppt38
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章