首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

java中集合解决方案

2012-01-15 
java中集合class Foo{int value 1public void test(int value){this.value value}public static voi

java中集合
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
我记得这是在学校的时候老师出的一道选择题……
[解决办法]
探讨
list和set的区别
list会比较equals
set会比较equals和hashCode
如果这些方法都没有重写,就被认为是不同的而调用Object的缺省方法,那么因为是不同的new必然会false


Java code
class Foo{
int value = 1;
public Foo(int value){
this.value……

热点排行