[자바] 집합 구조 분석

2804 단어 Java
소스 코드 를 연구 하면 대신 의 사고 와 우아 한 코드 를 어떻게 쓰 는 지 배 울 수 있다.
다음은 자바 가 소스 코드 를 모 으 는 과정 에서 큰 도움 을 준 블 로 거들 입 니 다.
http://www.cnblogs.com/skywang12345/
http://blog.csdn.net/ns_code/article/details/35564663
실 현 된 세부 사항 과 소스 코드 에 대한 분석 은 저 는 군말 이 많 지 않 습 니 다. 다음은 제 가 공부 하 는 과정 에서 의 의혹 과 집합 구조 디자인 의 방향 을 공유 하 겠 습 니 다.
그림 한 장 을 차용 하 다
[Java]集合架构分析_第1张图片
1. List, Set 인 터 페 이 스 는 모두 Collection 인 터 페 이 스 를 계승 하고 맵 은 Collection 에 의존한다.
이 유 는 List 와 Set 는 본질 적 으로 하나의 집합 이 고 Map 은 본질 적 으로 하나의 키 대 집합 이 며 분리 하면 키 집합 과 값 집합 이다.
맵 에서 세 가지 방법 을 정의 합 니 다.
1.1 keyset
public Set keySet();
모든 것 가 져 오기
키 집합, 맵 은 한 쌍 의 다 중 관계 만 인정 하고 한 키 는 여러 값 에 대응 하기 때문에
키 는 중복 되 지 않 습 니 다. Set 인터페이스 규정 은 중복 되 는 요 소 를 포함 하지 않 습 니 다.
1.2 values
public Collection values();

값 집합 은 집합 이 고, 게다가
중복 허용.
1.3 entrySet
    public Set> entrySet();
맵 에 있 는 모든 Entry 의 집합 을 가 져 오고 중복 을 허용 하지 않 습 니 다.Entry 의 Hash 값 에 따라 중복 여 부 를 판단 하 는 기준 으로 대상 에 따라 Hash 값 이 같 을 수 있 으 나 가능성 이 너무 낮 아 무시 할 수 있 습 니 다.
2. Map 인터페이스 에서 내부 인터페이스 Entry 정의
Map 은 링크 를 기반 으로 하 는 배열 로 그 중에서 배열 안에 넣 은 것 이 바로 Entry 이다.
Map 인터페이스 에 포 함 된 것 은 배열 에 대한 작업 입 니 다. 예 를 들 어 clear 가 배열 을 비우 고 entry Set 은 모든 entry 를 포함 하 는 set 대상 을 되 돌려 줍 니 다.
2.1 Map 인 터 페 이 스 를 실현 하 는 추상 적 인 추상 적 인 AbstractMap 은 그 중의 대부분 방법 을 덮어 주 었 다.
2.2 실현 Map. Entry 인터페이스의 추상 적 인 클래스 Simple Immutable Entry (값 은 변 하지 않 음), Simple Entry (값 은 변 하지 않 음) 는 추상 적 인 클래스 AbstractMap 내부 에 있 습 니 다.
2.3 HashMap 등 AbstractMap 의 실현 서브 클래스 에 서 는 AbstractMap 에서 Map 인터페이스 에 다시 쓰 는 방법 이 없 으 며, entry Set, put 등 방법 을 덮어 씁 니 다.
3. HashTable 과 HashMap 의 차이 점 중 하 나 는 스 레 드 안전 에 있 고 HashMap 도 스 레 드 안전 류 인 Concurrent HashMap 이 있 는데 이들 의 공통점 과 차이 점 이 있다.
3.1 Hash Table 은 스 레 드 동기 화 입 니 다.
3. Concurrent HashMap 은 스 레 드 병행 을 지원 합 니 다.
3.3 총화 같은 시간 동안 하나의 스 레 드 만 HashTable 에 접근 할 수 있 고 여러 스 레 드 가 Concurrent HashMap 에 접근 할 수 있 습 니 다.
4. HashSet 은 HashMap 을 통 해 이 루어 집 니 다.
4.1 구조 HashMap 을 통 해 키 안에 저장
HashMap> backingMap;

4.2 키 에 요소 추가
 @Override
    public boolean add(E object) {
        return backingMap.put(object, this) == null;
    }

4.3 HashMap 의 키 집합 을 교체 기 를 통 해 만 값 을 얻 을 수 있 습 니 다.
    @Override
    public Iterator iterator() {
        return backingMap.keySet().iterator();
    }

5. 등 보충

좋은 웹페이지 즐겨찾기