包含字节数组列表的方法

Fuz*_*mil 0 java bytearray contains list

所以我有一个列表List<byte[]>可以说“fullList”,其中一些其他代码生成另一个包含一些byte[]partialList的列表。所以我使用 .contain 方法,该方法总是无法从 fullList 中搜索 partialList 中的 got byte[]。为什么是这样??

List<byte[]> fullList = {some byte[] arrays added here..}
List<byte[]> partialList = {some byte[] arrays added here..}

byte[] toCheck = partialList.get(0);
System.out.println("The check is "+ fullList.contains(tocheck));
Run Code Online (Sandbox Code Playgroud)

tob*_*s_k 5

问题是Java 数组没有equals正确实现,即两个数组只有在它们的内存地址相同时才被认为是“相等的”,即如果它们是完全相同的对象引用。

byte[] foo = {1,2,3};
byte[] bar = {1,2,3};
System.out.println(foo.equals(bar)); // prints 'false'
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您可以将它们编码byte[]为数字并使用List<Integer>(或Long) 代替,或者使用Arrays.equals

boolean contains(List<byte[]> arrays, byte[] other) {
    for (byte[] b : arrays)
        if (Arrays.equals(b, other)) return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)