所以我有这个List<>其中包含布尔数组:
static List<boolean[]> myList = new ArrayList<>();
这些是我添加到列表中的数组:
boolean[] myBooleanArray = new boolean[8];
所以现在当我使用for()循环通过myList时,使用:
myList.get(ⅰ);
我的输出在控制台中是这样的:
[Z@65e7c41f
但我也想进入对象。我该怎么做?
答案 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.equals
,Arrays.toString
和Arrays.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]);
}
+:我已经通过这种方式显示了数组的元素,以便您更清楚地了解如何访问数组元素。