자바 의 맵 인터페이스 및 구현 클래스
6211 단어 Java
Map 인터페이스: 2 열 데이터, key - value 쌍 의 데 이 터 를 저장 합 니 다.
1. HashMap 은 Map 의 주요 실현 유형 으로서 스 레 드 가 안전 하지 않 고 효율 이 높 으 며 null 의 key 와 value 를 저장 할 수 있 습 니 다.
HashMap 바 텀: 배열 과 링크 (jdk 7) 배열, 링크 와 빨 간 검 은 나무 (jdk 8)
HashMap 의 내부 클래스: Node
static class Node implements Map.Entry{
final int hash;
final k key;
v value;
Node next;
}
HashMap 소스 코드 의 중요 한 상수:
DEFAULT_INITIAL_CAPACITY: HashMap 의 기본 용량, 16
MAXIMUM_CAPACITY: HashMap 의 최대 지 지 량, 0.75
DEFAULT_LOAD_FACTOR: HashMap 의 기본 로드 인자
TREEIFY_THRESHOLD: Bucket 에서 링크 의 길 이 는 이 기본 값 보다 크 고 빨간색 과 검은색 트 리 로 전환 합 니 다. 8
UNTREEIFY_THREHOLD: Bucket 에 저 장 된 빨간색 과 검은색 트 리 의 노드 는 이 기본 값 보다 작 으 며 링크 로 전 환 됩 니 다.
MIN_TREEIFY_CAPACITY: 통 의 노드 가 트 리 화 될 때 가장 작은 Hash 표 용량, 64
table: 원 소 를 저장 하 는 배열, 항상 2 의 N 차 멱
entry Set: 구체 적 인 요 소 를 저장 하 는 집합
size: HashMap 에 저 장 된 키 쌍 의 수량
modCount: HashMap 확장 및 구조 변경 횟수
threshold: 확장 임계값 은 용량 충전 인자 와 같 습 니 다. 12.
loadFactor: 충전 인자
2. LinkedHashMap: HashMap 의 하위 클래스 로 맵 요 소 를 옮 겨 다 닐 때 추 가 된 순서에 따라 옮 겨 다 닐 수 있 도록 합 니 다. 빈번 한 옮 겨 다 니 기 동작 에 대한 집 니 다. 행 효율 이 HashMap 보다 높다.
원인: 기 존의 HashMap 하부 구 조 를 바탕 으로 한 쌍 의 지침 을 추가 하여 앞의 요소 와 뒤의 요 소 를 가리킨다.
LinkedHashMap 의 내부 클래스: Entry
static class Entry extends HashMap.Node{
Entry before,after;//
Entry(int hash,k key,v value,Node next){
super(hash,key,value,next);
}
}
3. TreeMap: 추 가 된 key - value 에 따라 정렬 하여 정렬 을 할 수 있 도록 합 니 다. 이때 key 의 자 연 스 러 운 정렬 이나 맞 춤 형 정렬 을 고려 합 니 다.1 층 에 서 는 붉 은 검 은 나 무 를 사용한다.
TreeMap 에 key - value 쌍 을 추가 합 니 다. key 는 같은 클래스 에서 만 든 대상 이 어야 합 니 다. key 에 따라 정렬 되 어야 하기 때 문 입 니 다.
4. Hashtable 은 오래된 실현 류 로 서 스 레 드 가 안전 하고 효율 이 낮 으 며 null 의 key 와 value 를 저장 할 수 없습니다.밑바닥 은 모두 해시 표 구 조 를 사용 하여 조회 속도 가 빠르다.
5. Properties: Hashtable 의 하위 클래스 로 설정 파일 을 처리 하 는 데 자주 사 용 됩 니 다.key 와 value 는 모두 String 형식 입 니 다.데 이 터 를 액세스 할 때 setProperty (String key, String value) 와 getProperty (String key) 를 사용 하 는 것 을 권장 합 니 다.
Properties pros = new Properties();
pros.load(new FileInputStream("jdbc.properties"));
String user = pros.getProperty("user");
System.out.println(user);
2. 맵 구조의 이해
Map 의 key: 무질서 하고 중복 되 지 않 습 니 다. set 로 모든 key 를 저장 합 니 다. --->key 가 있 는 클래스 는 equals () 와 hashCode () 를 다시 써 야 합 니 다. (HashMap 을 예 로 들 면)
Map 의 value: 무질서 합 니 다. 중복 가능, Collection 을 사용 하여 모든 value 를 저장 합 니 다.value
있 는 클래스 는 equals () 를 다시 써 야 합 니 다.
키 쌍: key - value 는 Entry 대상 을 구성 합 니 다.
Map 의 Entry: 무질서 합 니 다. 중복 할 수 없습니다. Set 를 사용 하여 모든 Entry 를 저장 합 니 다.
3. Map 인터페이스의 상용 방법
void puutAll (Map m): m 의 모든 key - value 를 현재 map 에 저장 합 니 다.
Object remove (Object key): 지정 한 key - value 쌍 을 제거 하고 value 를 되 돌려 줍 니 다.
void clear (): 현재 맵 의 모든 데 이 터 를 삭제 합 니 다.
Map map = new LinkedHashMap();
map.put(123,"AA");
map.put("12","BB");
map.put(3,"CC");
map.put(6,4);
System.out.println(map);
Map map1 = new LinkedHashMap();
map1.put(8,"CC");
map1.put(9,0);
map.putAll(map1);
System.out.println(map);
Object value = map.remove("CC");
System.out.println(map);
System.out.println(value);
map1.clear();
System.out.println(map1.size());
boolean containsKey (Object key): 지정 한 key 를 포함 하 는 지 여부
boolean contains Value (Object value): 지정 한 value 를 포함 하 는 지 여부
int size (): map 의 key - value 쌍 의 개 수 를 되 돌려 줍 니 다.
boolean IsEmpty (): 현재 맵 이 비어 있 는 지 판단 하기
boolean equals (Object obj): 현재 map 와 매개 변수 대상 obj 가 같은 지 판단 합 니 다.
Map map2 = new HashMap();
map2.put(123,"AA");
map2.put("12","BB");
map2.put(3,"CC");
map2.put(6,4);
Object obj = map2.get(6);
System.out.println(obj);
boolean isExist = map2.containsKey("12");
System.out.println(isExist);
System.out.println( map2.containsValue(4));
boolean bool = map2.equals(map);
System.out.println(bool);
Collection values (): 모든 value 로 구 성 된 Collection 집합 을 되 돌려 줍 니 다.
Set entry Set (): 모든 key - value 로 구 성 된 Set 집합 을 되 돌려 줍 니 다.
Map map3 = new HashMap();
map3.put(123,"AA");
map3.put("12","BB");
map3.put(3,"CC");
map3.put(6,4);
// key :keySet()
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
// value
Collection val = map3.values();
for (Object ob : val){
System.out.println(ob);
}
//
Set se = map3.entrySet();
Iterator iterator1 = set.iterator();
while (iterator1.hasNext()){
Object o = iterator1.next();
Map.Entry entry = (Map.Entry)o;//se entry
System.out.println(entry.getKey() +"dsdd" +entry.getValue() );
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.