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()测试的是数组的地址,那怎么才能测试数组的值呢?高手指点一下
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()测试的是数组的地址,那怎么才能测试数组的值呢?高手指点一下
byte[] dec={1,2}; 这两个代表的是不同的两个对象,如果照你的理解我改变src也会改变dec 吗?就相当于两个人有相同的身高一样,但其实是不一样的两个东西。
现在有一个数组C={1,2}
我想用m_Cs.contain(c)测试一下
如果m_Cs中有{1,2}就不把C放进去了
能做到吗?
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); }}不知道这样符不符合楼主的意思
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;
}
}
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]由此可以看出楼上的结论
看来重写是唯一的方法了
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());
}
看来需要研究一下