자바 배고픈
핵심 자바 인터뷰 질문에서는 수집 프레임 워크 질문에 포격당하는 것이 일반적입니다. 저는 골드만 삭스에서 인터뷰를 받았는데,거기서 그들은 제가 어디서 멍청하게 되었는지 질문을 했습니다. 면접관은 해시 집합의 내부 작업 또는 해시 집합이 자바에서 어떻게 작동하는지 다른 말로 자바 세트를 구현하는 방법을 물었다. 즉,세트 인터페이스 또는 세트 인터페이스를 구현하는 클래스를 사용하지 않고 각각의 모든 요소가 고유한지 확인하는 방법입니다.
또한 읽기:해시 맵은 자바에서 작동하는 방법
뿐만 아니라 라운드 인터뷰를 자격 있지만 나는 대답을했다,하지만 대답은 만족에서 멀리이다.
그래서 집에 돌아와서 몇 가지 조사를했습니다. 그래서 마침내 나는 답을 얻었고 그것을 당신과 공유했습니다.
자바
에서 내부적으로 구현 집합의 모든 요소는 고유합니다. 그래서 집합에 중복 요소가 없습니다.
그래서 자바에서 우리는 집합의 요소를 추가 할 경우 우리는이 같은 코드를 작성
공공 클래스 자바 헝 그리{공공 정적 무효 주(문자열 인수){//할일 자동 생성 방법 스텁 해시 세트<객체>해시 세트=새로운 해시 세트<객체>();해시 세트.추가(3);해시 세트.추가("자바 배고픈");해시 세트.추가("블로그 스팟");체계.밖으로.해시셋은 다음과 같습니다.); }}
그것은 결과를 인쇄 할 것입니다 : 설정
이제 위의 코드에 중복 요소를 추가 할 수 있습니다
공개 클래스 자바 헝 그리{공개 정적 무효 주(문자열 인수){해시<개체>해시=새 해시<개체>();해시.추가(3);해시 세트.추가("자바 배고픈");해시 세트.추가("블로그 스팟");해시 세트.추가(3);//중복 요소 해시 세트.추가("자바 배고픈");//중복 요소 시스템.밖으로.해시셋은 다음과 같습니다.); }}
그것은 결과를 인쇄 할 것입니다 : 당신이 설정 한 개체의 추가()방법에 중복 요소를 전달할 때 내부적으로 무슨 일이,그것은 거짓 반환하고 요소가 이미 존재하는 한,해시 세트에 추가하지 않습니다.
그러나 주된 문제는 그것이 어떻게 거짓으로 돌아 오는 지 발생한다. 그래서 여기에 대답은
추가()메서드의 해시셋 구현을 열 때 rt.jar ,당신은에서 다음 코드를 찾을 수
공개 클래스 해시<이자형>추상 집합을 확장<이자형>세트 구현<이자형>,복제 가능,java.io.백업 맵의 객체와 연결하는 더미 값 개인 정적 최종 객체 존재=새 객체(),공공 해시 세트(){지도=새 해시 맵<>(); } // 일부 코드,즉 해시 세트의 다른 메소드 공개 부울 추가(예:){반환 맵.일부 코드,즉 해시 세트의 다른 메소드}
그래서 우리는 해시 맵을 통해 자바에서 내부적으로 집합에서 고유성을 달성하고 있습니다. 해시셋의 객체를 생성할 때마다 위 코드의 기울임꼴 줄에서 볼 수 있듯이 해시맵의 객체를 생성할 것입니다.
우리는 이미 자바에서 해시 맵이 내부적으로 어떻게 작동하는지 논의했습니다.
해시 맵에서 알 수 있듯이 각 키는 고유합니다. 그래서 우리가 세트에서 할 것은 우리가 추가에 인수를 전달하는 것입니다(엘레 멘 이자형)즉,이자형 해시 맵의 키로. 이제 우리는 키에 어떤 값을 연결해야합니다.
그래서 실제로 해시 집합과 같은 해시 집합에 줄을 추가 할 때.추가(3)어떤 자바는 내부적으로하는 것은 그 요소를 넣을 것입니다 이자형 여기에 3 해시 맵의 키로(해시 세트 객체 생성 중에 생성)및 객체의 객체 인 일부 더미 값은 키에 값으로 전달됩니다.
위의 코드에서 주목해야 할 주요 사항은 풋(키,값)이
1 을 반환한다는 것입니다. 키가 고유하고 맵
2 에 추가 된 경우. 키의 이전 값,키가 중복 된 경우
그래서,해시 세트 추가()방법,우리는지도의 반환 값을 확인합니다.(키,값)방법을 넣어 널 값
즉,
공용 부울 추가(전자){
반환지도.이 문제를 해결하는 방법은 다음과 같습니다.