Chúng ta có thể tìm thấy hashcode
một trong list
đó có chứa chính nó element
?
Tôi biết đây là một thực hành tồi, nhưng đây là những gì người phỏng vấn hỏi.
Khi tôi chạy đoạn mã sau, nó sẽ ném StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
Bây giờ ở đây tôi có hai câu hỏi:
- Tại sao có một
StackOverflowError
? - Có thể tìm mã băm theo cách này?
List
giao diện, hashCode
danh sách phụ thuộc vào các thành viên của nó. Cho rằng danh sách là thành viên của chính nó, mã băm của nó phụ thuộc vào danh sách, nó hashCode
phụ thuộc vào hashCode
... và cứ thế, gây ra đệ quy vô hạn và StackOverflowError
bạn đang chạy vào. Bây giờ câu hỏi là: tại sao bạn yêu cầu một danh sách để chứa chính nó? Tôi có thể đảm bảo với bạn rằng bạn có thể đạt được bất cứ điều gì mà bạn đang cố gắng làm, theo cách tốt hơn, mà không yêu cầu thành viên đệ quy như thế này.