자바 면접 문제 돌진 3 일 째--집합 프레임

면접 문제 1:Vector,Array List,LinkedList 와 비교 하면 어떤 차이 가 있 습 니까?어떤 장면 에서 사용 하기에 적합 합 니까?
在这里插入图片描述
진지 하 게 대답 하 다.
이 세 가 지 는 모두 List,즉 이기 때문에 구체 적 인 기능 도 비슷 하 다.예 를 들 어 위치 에 따라 포 지 셔 닝,추가 또는 삭제 작업 을 제공 하고 교체 기 를 제공 하여 그 내용 을 옮 겨 다 니 는 등 이다.그러나 구체 적 인 디자인 차이 로 인해 행위,성능,스 레 드 안전 등에 있어 표현 이 많이 다르다.Vector:자바 가 초기 에 제공 한 입 니 다.스 레 드 안전 이 필요 하지 않 으 면 선택 하 는 것 을 권장 하지 않 습 니 다.동기 화 는 추가 비용 이 있 기 때 문 입 니 다.
Vector 내 부 는 대상 배열 로 데 이 터 를 저장 하 며 필요 에 따라 자동 으로 용량 을 늘 릴 수 있 습 니 다.배열 이 가득 차 서 확장 을 시작 할 때 새로운 확장 후 배열 을 만 들 고 기 존 배열 데 이 터 를 복사 한 다음 에 원래 배열 을 삭제 합 니 다.ArrayList( " " " " ):더욱 광범 위 한 동적 배열 을 응용 하여 실현 하 는 것 으로 그 자체 가 스 레 드 가 안전 하지 않 기 때문에 성능 이 많이 좋다.Vector 와 비슷 하고 Array List 도 수요 에 따라 용량 을 조정 할 수 있 지만 이들 의 조정 논 리 는 차이 가 있다.Vector 1 , ArrayList 50%。
  • 데이터 구조:Array List 는 동적 배열 의 데이터 구조 실현 이다.
  • 무 작위 조회 효율:(장점)ArrayList 는 LinkedList 보다 무 작위 로 방문 할 때 효율 이 높 습 니 다. LinkedList , 이 고 ArrayList 는 각 표지 index 에 따라 위 치 를 직접 잠 그 기 때 문 입 니 다.
  • 삽입 과 삭제 효율:List 중간 에 데 이 터 를 삽입 하고 삭제 할 때 Array List 는 LinkedList 보다 효율 이 훨씬 낮 습 니 다.Array List 삭제 작업 은 배열 안의 다른 데이터 의 아래 표 시(전체 이동)에 영향 을 주 고 정상 적 인 말미 추가 방식 이 라면 효율 이 대체적으로 같 기 때 문 입 니 다.
  • 메모리 공간 점용:LinkedList 는 ArrayList 보다 메모 리 를 더 차지 합 니 다.LinkedList 의 노드 는 데 이 터 를 저장 하 는 것 외 에 두 개의 인용 도 저장 되 어 있 기 때 문 입 니 다.하 나 는 앞의 요 소 를 가리 키 고 하 나 는 뒤의 요 소 를 가리 키 기 때 문 입 니 다.
  • LinkedList( " " " " ):말 그대로 자바 가 제공 하 는 양 방향 링크 이기 때문에 위의 두 가지 처럼 용량 을 조정 할 필요 가 없고 스 레 드 가 안전 한 것 도 아니다.
  • 데이터 구조:LinkedList 는 양 방향 링크 의 데이터 구조 실현 이다.
  • 무 작위 조회 효율:ArrayList(약점)
  • 에 비해
  • 삽입 과 삭제 효율:LinkedList 는 번호 에 따라 데 이 터 를 조회 할 때 앞 방향 또는 뒤 방향 으로 옮 겨 다 녀 야 하지만 데 이 터 를 삽입 할 때 현재 항목 의 앞 뒤 항목 만 기록 하면 되 고 삭제 할 때 도 링크 지향 만 수정 하면 되 기 때문에 LinkedList 의 삽입 과 삭제 속도 가 비교적 빠르다.(우세)
  • 메모리 공간 점용:ArrayList(약점)에 비해
  • 在这里插入图片描述
    깊이 추궁:
    추궁 1:다 중 스 레 드 필드 에서 Array List 를 사용 할 수 없 습 니까?
    ArrayList 는 스 레 드 가 안전 하지 않다 는 것 을 알 고 있 습 니 다.다 중 스 레 드 장면 을 만나면 Collections 의 synchronizedList 방법 을 통 해 스 레 드 가 안전 한 용기 로 변환 한 후에 사용 할 수 있 습 니 다.예 를 들 어 아래 와 같이:
    
    List<String> syncList = Collections.synchronizedList(arraylist);
    면접 문제 2:List 와 Set 는 어떤 차이 가 있 습 니까?진지 하 게 대답 하 다.
    List,Set 는 모두 Collection 인 터 페 이 스 를 계승 하 는 것 으로 다음 과 같은 몇 가지 차이 가 있다.
  • 중복 대상
  • list 방법 은 중 복 된 대상 을 허용 할 수 있 으 며,set 방법 은 중 복 된 대상 을 허용 하지 않 습 니 다.
  • null 원소
  • list 는 여러 개의 null 요 소 를 삽입 할 수 있 고 set 는 하나의 null 요소 만 삽입 할 수 있 습 니 다.
  • 용기 의 질서 여부
  • list 는 모든 요소 의 삽입 순 서 를 유지 하 는 질서 있 는 용기 입 니 다.즉,출력 순 서 는 입력 순서 이 고 set 방법 은 무질서 용기 로 모든 요소 의 저장 순 서 를 보장 할 수 없습니다.TreeSet 은 Comparator 나 Comparable 을 통 해 정렬 순 서 를 유지 합 니 다.
  • 자주 사용 하 는 실현 류
  • list :Array List,LinkedList,Vector.ArrayList 가 가장 많이 사용 되 고 색인(index)접근 을 제공 하 며 포 지 셔 닝,조회 효율 이 높 습 니 다.한편,LinkedList 는 List 에서 요 소 를 추가 하거나 삭제 해 야 하 는 경우 에 더욱 적합 합 니 다.Vector 는 바 텀 배열,스 레 드 가 안전 하고 효율 이 낮 으 며 가장자리 화 되 었 음 을 나타 냅 니 다~Set :HashSet,LinkedHashSet,TreeSet.가장 많이 사용 되 는 것 은 HashMap 을 바탕 으로 이 루어 진 HashSet 이다.또한 TreeSet 은 SortedSet 인터페이스(정렬 지원)를 실현 하기 때문에 TreeSet 는 compare()와 compare To()방법 에 따라 정렬 할 수 있 는 질서 있 는 용기 입 니 다.
  • 옮 겨 다 니 는 방식
  • List 는 for 순환 을 지원 합 니 다.즉,아래 표 시 를 통 해 옮 겨 다 닐 수도 있 고 교체 기(Iterator)를 사용 할 수도 있 습 니 다.그러나 set 는 교체 만 사용 할 수 있 습 니 다.순서 가 없 기 때문에 아래 표 시 를 통 해 원 하 는 값 을 얻 을 수 없습니다.
    깊이 추궁:추궁 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 는 기본 데이터 형식 과 대상 을 저장 할 수 있 고 Array List 는 대상 만 저장 할 수 있 습 니 다.
  • Array 는 고정 크기 를 지정 하고 Array List 크기 는 자동 으로 확 장 됩 니 다.
  • Array 내장 방법 은 ArrayList 가 많 지 않 습 니 다.예 를 들 어 addAll,removeAll,iteration 등 방법 은 ArrayList 만 있 습 니 다.
  • Array ArrayList ,Array 회전 List 는 다음 과 같 습 니 다.Arrays.asList(array);List 는 List.toArray()방법 이 있 습 니 다.
    총결산
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기