자바 면접 문제 돌진 3 일 째--집합 프레임
진지 하 게 대답 하 다.
이 세 가 지 는 모두
List
,즉
이기 때문에 구체 적 인 기능 도 비슷 하 다.예 를 들 어 위치 에 따라 포 지 셔 닝,추가 또는 삭제 작업 을 제공 하고 교체 기 를 제공 하여 그 내용 을 옮 겨 다 니 는 등 이다.그러나 구체 적 인 디자인 차이 로 인해 행위,성능,스 레 드 안전 등에 있어 표현 이 많이 다르다.Vector:
자바 가 초기 에 제공 한
입 니 다.스 레 드 안전 이 필요 하지 않 으 면 선택 하 는 것 을 권장 하지 않 습 니 다.동기 화 는 추가 비용 이 있 기 때 문 입 니 다.Vector 내 부 는 대상 배열 로 데 이 터 를 저장 하 며 필요 에 따라 자동 으로 용량 을 늘 릴 수 있 습 니 다.배열 이 가득 차 서 확장 을 시작 할 때 새로운 확장 후 배열 을 만 들 고 기 존 배열 데 이 터 를 복사 한 다음 에 원래 배열 을 삭제 합 니 다.
ArrayList( " " " " ):
더욱 광범 위 한 동적 배열 을 응용 하여 실현 하 는 것 으로 그 자체 가 스 레 드 가 안전 하지 않 기 때문에 성능 이 많이 좋다.Vector 와 비슷 하고 Array List 도 수요 에 따라 용량 을 조정 할 수 있 지만 이들 의 조정 논 리 는 차이 가 있다.Vector 1 , ArrayList 50%。
LinkedList ,
이 고 ArrayList 는 각 표지 index 에 따라 위 치 를 직접 잠 그 기 때 문 입 니 다.LinkedList( " " " " ):
말 그대로 자바 가 제공 하 는 양 방향 링크 이기 때문에 위의 두 가지 처럼 용량 을 조정 할 필요 가 없고 스 레 드 가 안전 한 것 도 아니다.깊이 추궁:
추궁 1:다 중 스 레 드 필드 에서 Array List 를 사용 할 수 없 습 니까?
ArrayList 는 스 레 드 가 안전 하지 않다 는 것 을 알 고 있 습 니 다.다 중 스 레 드 장면 을 만나면 Collections 의 synchronizedList 방법 을 통 해 스 레 드 가 안전 한 용기 로 변환 한 후에 사용 할 수 있 습 니 다.예 를 들 어 아래 와 같이:
List<String> syncList = Collections.synchronizedList(arraylist);
면접 문제 2:List 와 Set 는 어떤 차이 가 있 습 니까?진지 하 게 대답 하 다.List,Set 는 모두 Collection 인 터 페 이 스 를 계승 하 는 것 으로 다음 과 같은 몇 가지 차이 가 있다.
list :
Array List,LinkedList,Vector.ArrayList 가 가장 많이 사용 되 고 색인(index)접근 을 제공 하 며 포 지 셔 닝,조회 효율 이 높 습 니 다.한편,LinkedList 는 List 에서 요 소 를 추가 하거나 삭제 해 야 하 는 경우 에 더욱 적합 합 니 다.Vector 는 바 텀 배열,스 레 드 가 안전 하고 효율 이 낮 으 며 가장자리 화 되 었 음 을 나타 냅 니 다~Set :
HashSet,LinkedHashSet,TreeSet.가장 많이 사용 되 는 것 은 HashMap 을 바탕 으로 이 루어 진 HashSet 이다.또한 TreeSet 은 SortedSet 인터페이스(정렬 지원)를 실현 하기 때문에 TreeSet 는 compare()와 compare To()방법 에 따라 정렬 할 수 있 는 질서 있 는 용기 입 니 다.깊이 추궁:추궁 1:Set 과 List 의 효율 적 인 대 비 는 어 떻 습 니까?
Set:
삭제 와 삽입 효율 이 높 고 삽입 과 삭 제 는 요소 의 위치 변 화 를 일 으 키 지 않 습 니 다.원 소 를 검색 하면 효율 이 떨어진다.물론 이상 적 인 상황 에서 하 쉬 충돌 상황 을 고려 하지 않 고 한 번 의 포 지 셔 닝 만으로 완성 할 수 있 으 며 시간 복잡 도 는 O(1)이지 만 현실 적 이지 않다.List:
배열 과 유사 합 니 다.List 는 동태 적 으로 증가 하고 요 소 를 찾 는 효율 이 높 으 며 삭제 요 소 를 삽입 하 는 효율 이 낮 습 니 다.다른 요소 의 위치 변 화 를 일 으 킬 수 있 기 때 문 입 니 다.1000 만 요 소 를 테스트 한 적 이 있 는 상황 에서 Set 은 9999999 번 째 요 소 를 조회 하 는 데 0.203 초,List 는 9999999 번 째 요 소 를 조회 하 는 데 0.01 초 를 사용 했다.
추궁 2:HashSet 의 실현 원 리 를 말 해 볼 까요?
HashSet 바 텀 은 HashMap 을 바탕 으로 이 루어 진 것 으로
HashMap
할 수 있 습 니 다.따라서 HashSet 구조 도 배열+링크+빨 간 검 은 나무 이 고 get 방법 도 사용 할 수 없습니다.HashSet 의 조작 은 대체적으로 바 텀 HashMap 의 관련 방법 을 직접 호출 하여 이 루어 집 니 다.key 중복 은 허용 되 지 않 지만 null 대상 을 key 로 지원 합 니 다.3:HashSet 은 키 가 중복 되 지 않도록 어떻게 보장 합 니까?
HashSet 의 값 은 중복 할 수 없습니다.업무 상 데이터 로 무 거 운 작업 을 하 는 데 자주 사 용 됩 니 다.그러면 그 는 요소 가 중복 되 지 않도록 어떻게 보장 합 니까?
HashSet 의 인 스 턴 스 에 값 을 추가 할 때 add 방법 을 사용 합 니 다.원본 코드 는 다음 과 같 습 니 다.
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
코드 에 있 는 add 방법 으로 알 수 있 듯 이 HashMap 을 유지 하여 요소 의 추 가 를 실현 합 니 다.우 리 는 HashMap 이 2 열 집합 으로서 키 가 중복 되 지 않 는 다 는 것 을 알 고 있 습 니 다.HashMap hashCode equals
그래서 Hashmap 중의 key 는 유일한 것 이 고 hashset 요소 값 도 유일 하 게 결정 합 니 다.면접 문제 3:Array 와 Array List 는 어떤 차이 가 있 습 니까?
진지 하 게 대답 하 다.
Array ArrayList
,Array 회전 List 는 다음 과 같 습 니 다.Arrays.asList(array);List 는 List.toArray()방법 이 있 습 니 다.총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.