Потерянная идентичность объекта Java после создания моего собственного метода toString - PullRequest
1 голос
/ 26 июня 2019

предполагается, что у меня есть собственная реализация связного списка:

class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

Когда у меня есть такая простая настройка, я могу использовать узел на карте:

ListNode A = new ListNode(1);
ListNode B = new ListNode(2);
ListNode C = new ListNode(3);
A.next = B;
B.next = C;

Map<ListNode, Integer> hmp = new HashMap<>(Map.ofEntries(
    Map.entry(A, 1)
));

Когда я печатаю картуобъект, я получил:

System.out.println(hmp);
// >>> {ListNode@57829d67=1}

Однако, после того, как я реализовал метод toString для моего связного списка, чтобы я мог распечатать его прямо:

public String toString() {
    if (this.next != null) {
        return this.val + "->" + this.next.showString();
    } else {
        return String.valueOf(A.val);
    }
}

Теперь, если я могу напечататьсвязанный список, но если я снова распечатаю карту:

System.out.println(A);
// >>> 1->2->3
System.out.println(hmp);
// >>> {1->2->3=1}

Вы можете видеть, что я потерял оригинальный способ показать личность ListNode объекта на карте.

  1. Есть ли способ исправить это?
  2. Есть ли метод, который я могу вызвать ListNode, чтобы показать ListNode@57829d67?

Единственное, что я вижу, это непереопределите метод toString, но создайте другой метод, чтобы показать строку моего объекта связного списка.Я не уверен, что это хорошая идея

Спасибо

1 Ответ

3 голосов
/ 26 июня 2019

То есть не"личность"; это hashCode() вашего ListNode. Позвоните hashCode(), чтобы получить «57829d67», когда захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...