Поэтому у меня есть этот список <>, который содержит логические массивы:
static List<boolean[]> myList = new ArrayList<>();
И это массивы, которые я добавляю в список:
boolean[] myBooleanArray = new boolean[8];
Итак, теперь, когда я иду через myList с циклом for(), используя это:
myList.get (я);
Мой вывод - это что-то вроде этого в консоли:
[Z@65e7c41f
Но я тоже хочу попасть в объекты. Как мне это сделать?
Поскольку массивы не переопределяют методы класса 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
для правильной hashCode
методов equals
, 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) + "]";
}
}
И главное:
public class Test {
static List<MyBooleanArray> myList = new ArrayList<>();
public static void main(String[] args){
boolean[] arr = {true, false};
boolean[] arr2 = {true, false};
myList.add(new MyBooleanArray(arr));
System.out.println(myList.contains(new MyBooleanArray(arr2))); //true
System.out.println(myList.get(0)); //MyBooleanArray [arr=[true, false]]
}
}
Вы получаете ссылки от 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]);
}
+: Я показал элементы массива таким образом, чтобы сделать более понятным для вас, как вы должны обращаться к элементам массива.
Arrays.toString(myList.get(i))
или использовать циклfor
для печати каждого элементаboolean
массива