有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java包含字节数组列表的方法

所以我有一个列表List<byte[]>让我们说“fullList”,其中一些其他代码段生成另一个包含一些byte[]partialList的列表。所以我用。contain方法在从完整列表中搜索partialList中的get 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));

共 (1) 个答案

  1. # 1 楼答案

    问题是Java数组do not implement ^{} properly,即两个数组只有在它们的内存地址相同,即它们是完全相同的对象引用时,才被认为是“相等的”

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

    为了解决这个问题,您可以将这些byte[]编码为数字并使用List<Integer>(或Long),或者使用^{}实现您自己的contains方法

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