เราสามารถหาhashcode
ของlist
ที่มีตัวมันเองเป็นelement
?
ฉันรู้ว่านี่เป็นวิธีปฏิบัติที่ไม่ดี แต่นี่คือสิ่งที่ผู้สัมภาษณ์ถาม
เมื่อฉันรันรหัสต่อไปนี้มันจะพ่น a StackOverflowError
:
public class Main {
public static void main(String args[]) {
ArrayList<ArrayList> a = new ArrayList();
a.add(a);
a.hashCode();
}
}
ตอนนี้ที่นี่ฉันมีสองคำถาม:
- ทำไมถึงมี
StackOverflowError
? - เป็นไปได้ไหมที่จะหารหัสแฮชด้วยวิธีนี้
List
อินเทอร์เฟซมากhashCode
รายการนั้นขึ้นอยู่กับสมาชิก เนื่องจากรายการนั้นเป็นสมาชิกของตัวเองรหัสแฮชจะขึ้นอยู่กับว่ามันhashCode
ขึ้นอยู่กับhashCode
... และอื่น ๆ ทำให้เกิดการเรียกซ้ำแบบไม่สิ้นสุดและStackOverflowError
คุณกำลังทำงานอยู่ ตอนนี้คำถามคือ: ทำไมคุณต้องการรายการที่จะมีตัวเอง? ฉันรับประกันได้ว่าคุณจะประสบความสำเร็จในทุกสิ่งที่คุณพยายามทำในวิธีที่ดีกว่าโดยไม่ต้องเป็นสมาชิกแบบเรียกซ้ำแบบนี้