[자바] 집합 구조 분석
2804 단어 Java
다음은 자바 가 소스 코드 를 모 으 는 과정 에서 큰 도움 을 준 블 로 거들 입 니 다.
http://www.cnblogs.com/skywang12345/
http://blog.csdn.net/ns_code/article/details/35564663
실 현 된 세부 사항 과 소스 코드 에 대한 분석 은 저 는 군말 이 많 지 않 습 니 다. 다음은 제 가 공부 하 는 과정 에서 의 의혹 과 집합 구조 디자인 의 방향 을 공유 하 겠 습 니 다.
그림 한 장 을 차용 하 다
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. 등 보충
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.