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)
问题是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)