Java中,ArrayList的contains()和HashSet的contains()的区别,哈希值问题
今天我看源码前者是for循环equals.后者貌似是比较哈希值.假如:classFoo(){}HashSetset=newHashSet();set.add(newFoo...
今天我看源码前者是for循环equals.后者貌似是比较哈希值.
假如:
class Foo() {
}
HashSet set = new HashSet();
set.add(new Foo());
set.contains(new Foo());
结果为false.为什么..
我输出两个string(都是new String("a")),他们的哈希值是一样的..
但是我输出两个类都是直接new新的..哈希值是不一样的..
有什么区别么.
是不是因为没有重写Foo
中hashcode和equals方法。 展开
假如:
class Foo() {
}
HashSet set = new HashSet();
set.add(new Foo());
set.contains(new Foo());
结果为false.为什么..
我输出两个string(都是new String("a")),他们的哈希值是一样的..
但是我输出两个类都是直接new新的..哈希值是不一样的..
有什么区别么.
是不是因为没有重写Foo
中hashcode和equals方法。 展开
3个回答
展开全部
ArrayList与HashSet都是Collections类的子类,Collection类提供了许多常用的方法,例如contains()就是其中一个!我没有看过这两个类的contains()具体是如何实现的,但是通过数据结构我觉得应该是这个样子,ArrayList也就是一个数组,遍历整个数组,如果数组中存在这样一个元素equals(Object obj);那么就是true否则返回false.而HashSet的话,只需要比较key就能确定是否含有该元素了!
eaquals()为true的话,一定有相同的HashCode的!
eaquals()为true的话,一定有相同的HashCode的!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询