两个Vector<classA>  vecA
Vector<classA>  vecB要判断vecA和vecB中的内容是否相同(比较的是内容,不是地址)开始用了Object.equals函数,后来发现,这个函数比较的好像是地址。
故在classA中自己实现了equals函数。可是现在调用 vecA.equals(vecB);似乎,系统没有调用Vector.equals中没有调用classA.equals判等。想请教两个问题
1、一般情况下,两个自定义类的Vector如果判断内容是否相等一般怎么实现。
2、按我目前的方法,如果要判断两个Vector内容是否相等,应该怎样做呢?
谢谢

解决方案 »

  1.   

    Vector的比较,内容取出来比吧。
    只是在楼主看来,
    vector1: 1,2,3
    vector2: 1,3,2这两个vector算不算相等
      

  2.   

    vecA.containsAll(vecB) && vecB.containsAll(vecA)
      

  3.   

    我用怎么不不对呢,判断出的为什么是false呢?
    是不是因为这个函数判断的也是类的指针呢?
      

  4.   

    Vector.equals中调用classA.equals需要你自己写的。你可以看看jakarta Commons包中的EqualsBuilder类。
      

  5.   

    http://www.blogjava.net/borball/archive/2006/03/07/34017.html
    中有这样一段话:

    EqualsBuilder的append()方法可以接受基本类型、对象、数组作为参数。EqualsBuilder强大的地方在于可以直接把数组作为参数传入append()方法,EqualsBuilder会依次比较数组中的每个元素。”
      

  6.   

    我把测试代码写出来吧 class INTE implements Cloneable{

    INTE(int in){
    x = in;
    }

    public int x;
    public void setint(int in){
    x = in;
    }

            public Object clone() 
            { 
                      Object o=null; 
                      try 
                      { 
                               o=super.clone(); 
                      } 
                      catch(CloneNotSupportedException e) 
                      { 
                               System.out.println(toString()); 
                      }                 
                      return o; 
            }
            
            public boolean equals(INTE B){
             if(this.x == B.x){
             return true;
             }
             else{
             return false;
             }
            }

    }
    main(){
     Vector<INTE> vecUserA = new Vector();
     Vector<INTE> vecUserB = new Vector();
    //              如果这样深拷贝,下面打印false
    // for(int i = 0; i<vecUserA.size(); ++i){
    // vecUserB.add((INTE)vecUserA.get(i).clone());
    // }                //如果这样浅拷贝,则打印true
    vecUserB.addAll(vecUserA);

    System.out.println(vecUserA.containsAll(vecUserB));
    System.out.println(vecUserB.containsAll(vecUserA));}我就想问问,如果这样深拷贝,要如何判等呢
      

  7.   

    比较接口是哪个?请教一下,找了半天文档没找到,以前没写过java程序,实在不太熟,见笑了