Невозможно получить доступ к моему логическому списку

1

Поэтому у меня есть этот список <>, который содержит логические массивы:

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

И это массивы, которые я добавляю в список:

boolean[] myBooleanArray = new boolean[8];

Итак, теперь, когда я иду через myList с циклом for(), используя это:

myList.get (я);

Мой вывод - это что-то вроде этого в консоли:

[Z@65e7c41f

Но я тоже хочу попасть в объекты. Как мне это сделать?

  • 1
    Этот вопрос задавался множество раз здесь, на SO. Вы должны использовать Arrays.toString(myList.get(i)) или использовать цикл for для печати каждого элемента boolean массива
  • 0
    возможный дубликат простейшего способа печати массива в Java
Теги:

2 ответа

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 для правильной 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]]
    }   
}
  • 0
    Спасибо, работал как шарм.
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]);
}

+: Я показал элементы массива таким образом, чтобы сделать более понятным для вас, как вы должны обращаться к элементам массива.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню