import java.util.*;
public class bb {
public static void main(String[] args){

ArrayList<byte[]> m_Cs=new ArrayList<byte[]>();
byte[] src={1,2};
byte[] dec={1,2};
boolean b,c,d;
m_Cs.add(src);
b=m_Cs.contains(dec);
c=m_Cs.contains(src);
System.out.println();
}
}
运行的结果是b=false,c=true,这说明contains()测试的是数组的地址,那怎么才能测试数组的值呢?高手指点一下

解决方案 »

  1.   

    src和dec就不是同一个对象,contains()就是测试是否包含这个对象,你添加的是src,所以他当然不包含dec,虽然dec和src的数组里面的内容是相同的。
      

  2.   

    byte[] src={1,2}; 
    byte[] dec={1,2}; 这两个代表的是不同的两个对象,如果照你的理解我改变src也会改变dec 吗?就相当于两个人有相同的身高一样,但其实是不一样的两个东西。
      

  3.   

    我的意思是m_Cs中有很多整形数组,比如包括{1,2},{3,4}
    现在有一个数组C={1,2}
    我想用m_Cs.contain(c)测试一下
    如果m_Cs中有{1,2}就不把C放进去了
    能做到吗?
      

  4.   


    import java.util.*;public class ArrayListTest { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayList<byte[]> m_Cs = new ArrayList<byte[]>();
    byte[] src = { 1, 2 };
    byte[] dec = { 1, 2 };
    boolean b, c, d;
    m_Cs.add(src);
    ListIterator iter = m_Cs.listIterator();
    for (byte[] element : m_Cs) {
    if(iter.hasNext()) {
    iter.next();
    int i = 0;
    while(i < src.length) {
    System.out.println(src[i]);
    i++;
    }

    }
    }

    b = m_Cs.contains(dec);
    c = m_Cs.contains(src); System.out.println(b);
    System.out.println(c); }}不知道这样符不符合楼主的意思
      

  5.   

    给你写了一个,楼主 看看
    public class TestArray { public static void main(String[] args) { ArrayList<byte[]> m_Cs = new ArrayList<byte[]>();
    byte[] src = { 1, 2 };
    byte[] src1 = { 1, 2 ,5};
    byte[] src2 = { 1, 2 ,8};
    byte[] src3 = { 1, 2 ,9};
    byte[] src4 = { 1, 2 ,10};
    byte[] src5 = { 2, 1};
    byte[] dec = { 5 ,2 ,1}; m_Cs.add(src);
    m_Cs.add(src1);
    m_Cs.add(src2);
    m_Cs.add(src3);
    m_Cs.add(src4);
    m_Cs.add(src5);

    for(int i = 0; i < m_Cs.size(); i++)
    {
    byte[] get = (byte[]) m_Cs.get(i);

    if(testEqual(get, dec))
    {
       System.out.println("arraylist有相等的不要再插入了,呵呵");
       return;
    }


    }

    System.out.println("恭喜,没有相等的,可以插入");
    }


        private static boolean testEqual(byte[] byte1, byte[] byte2)
        {
        
         java.util.Arrays.sort(byte1);
         java.util.Arrays.sort(byte2);
        
         if(byte1.length != byte2.length)
         {
         return false;
         }        for(int i = 0; i < byte1.length; i++)
            {
             if(byte1[i] != byte2[i])
             {
             return false;
             }
            }
        
            return true;
        
        }
    }
      

  6.   

    contains()方法的api文档中有:
    Returns true if this list contains the specified element. More formally, returns true if and only if this list contains at least one element e such that (o==null ? e==null : o.equals(e))ArrayList的源码中有这样一段:
    code=Java]for (int i = 0; i < size; i++)
    if (o.equals(elementData[i]))[[/code]由此可以看出楼上的结论
      

  7.   

    哦,我也试了equals(),也不行,看来他俩是一起的
    看来重写是唯一的方法了
        public boolean equals(Object o) {
    if (o == this)
        return true;
    if (!(o instanceof List))
        return false; ListIterator<E> e1 = listIterator();
    ListIterator e2 = ((List) o).listIterator();
    while(e1.hasNext() && e2.hasNext()) {
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1==null ? o2==null : o1.equals(o2)))
    return false;
    }
    return !(e1.hasNext() || e2.hasNext());
        }
    看来需要研究一下
      

  8.   

    因为src和dec存储的位子不一样,他们是两个不同的对象(只是有相同的值),contains方法实现是比较传进方法的对象是否相同,而不是比较传进方法的对象的值。
      

  9.   

    ArryList里的元素是可以重复的有顺序的(放入顺序),你看看你只添加了一个元素
      

  10.   

    重写了hashcode和equals方法才行