无法访问我的布尔列表

时间:2014-04-21 12:07:59

标签: java

所以我有这个List<>其中包含布尔数组:

static List<boolean[]> myList = new ArrayList<>();

这些是我添加到列表中的数组:

boolean[] myBooleanArray = new boolean[8];

所以现在当我使用for()循环通过myList时,使用:

myList.get(ⅰ);

我的输出在控制台中是这样的:

[Z@65e7c41f

但我也想进入对象。我该怎么做?

2 个答案:

答案 0 :(得分:2)

由于数组不会覆盖Object类中的方法,因此您将获得默认的String表示形式:

getClass().getName() + '@' + Integer.toHexString(hashCode())

如果要打印数组的内容,可以使用Arrays.toString()

for(boolean[] arr: myList){
  System.out.println(Arrays.toString(arr));
}

<小时/> 我不知道你使用List布尔数组做了什么,但要注意你可能会有一些小惊喜:

public class Test {   
    static List<boolean[]> myList = new ArrayList<>();

    public static void main(String[] args){
        boolean[] arr = {true, false};
        boolean[] arr2 = {true, false};

        myList.add(arr);
        System.out.println(myList.contains(arr2)); //false
    }   
}

另一种方法是创建一个包装您的布尔数组的包装类,您可以使用方法Arrays.equalsArrays.toStringArrays.hashcode来正确实现equals,{ {1}}和toString方法。

hashCode

主要:

class MyBooleanArray {
    private boolean[] arr;

    public MyBooleanArray(boolean[] arr) {
        this.arr = arr;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + Arrays.hashCode(arr);
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        MyBooleanArray other = (MyBooleanArray) obj;
        if (!Arrays.equals(arr, other.arr))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "MyBooleanArray [arr=" + Arrays.toString(arr) + "]";
    }   
}

答案 1 :(得分:1)

您将通过myList.get(i)获取参考资料。

要看到差异,请尝试以下方法:

for(int i=0; i < myList.size(); i++){
    System.out.println(myList.get(i));
    for (int j = 0; j < myList.get(i).length; j++)//+
        System.out.print(myList.get(i)[j]);
}

+:我已经通过这种方式显示了数组的元素,以便您更清楚地了解如何访问数组元素。