class Foo{
int value = 1;
public void test(int value){
this.value = value;
}
public static void main(String[] a){
ArrayList list = new ArrayList();
Set set = new HaspSet();
list.add(new Foo(1));
set.add(new Foo(1));
System.out.print(list.contains(new Foo(1))+","+set.contains(new Foo(1));
}
}
这题的答案是true,false!
list和set除了元素的顺序和元素的重复,还有啥不同之处吗?为什么set是false呢?或者说为什么list是true呢?
------解决方案--------------------------------------------------------
- Java code
class Test1 { int value = 1; public Test1(int i) { value = i; } public void test(int value) { this.value = value; } public static void main(String[] a){ ArrayList list = new ArrayList(); Set set = new HashSet(); list.add(new Test1(1)); set.add(new Test1(1)); System.out.print(list.contains(new Test1(1))+","+set.contains(new Test1(1))); }}
------解决方案--------------------------------------------------------
要是原题是2楼给的程序,肯定是不等的,contains(Object obj)方法是检验集合中是否包含有与obj相等的对象,new了两个相当于创建了2个对象,只添加了第一次,所以肯定不包含第二次new的,这个程序换个写法就看的很清楚了
- Java code
ArrayList list = new ArrayList();Test t1 = new Test(1); Test t2 = new Test(1); list.add(t1);System.out.println(list.contains(t2));
------解决方案--------------------------------------------------------
list和set的区别
list会比较equals
set会比较equals和hashCode
如果这些方法都没有重写,就被认为是不同的而调用Object的缺省方法,那么因为是不同的new必然会false
- Java code
class Foo{ int value = 1; public Foo(int value){ this.value = value; } @SuppressWarnings("unchecked") public static void main(String[] a){ ArrayList list = new ArrayList(); Set set = new HashSet(); list.add(new Foo(1)); set.add(new Foo(1)); System.out.println(list.contains(new Foo(1))+","+set.contains(new Foo(1))); }/* 把这个注释去掉试试看 public boolean equals(Object o) { if (o == null) return false; else if (o.getClass() != this.getClass()) return false; return this.value == ((Foo)o).value; }*//* 再把这个注释去掉试试看 public int hashCode() { return this.value; }*/}
------解决方案--------------------------------------------------------
contains( new Foo(1) )
你创建了另一个对象
------解决方案--------------------------------------------------------
5L正解
Set会比较hashcode
我记得这是在学校的时候老师出的一道选择题……
------解决方案--------------------------------------------------------