JAVA 에서 Map 에 관 한 9 대 문제 입 니 다.

3809 단어 map
일반적으로 맵 은 키 쌍 으로 구 성 된 데이터 구조 이 며 집합 에서 모든 키 가 유일 합 니 다.다음은 K 와 V 로 키 와 값 을 대표 하여 자바 에서 맵 에 관 한 9 가지 문 제 를 설명 합 니 다.0.맵 을 List 형식 으로 바 꾸 어 자바 에서 Map 인터페이스 에 세 가지 집합 획득 방식 을 제공 합 니 다:Key set,value set,and key-value set.그것들 은 모두 구조 방법 이나 addAll()방법 을 통 해 List 유형 으로 전환 할 수 있다.아래 코드 는 맵 에서 Array List 를 구성 하 는 방법 을 설명 합 니 다.
// key list
List keyList = new ArrayList(map.keySet());
// value list
List valueList = new ArrayList(map.valueSet());
// key-value list
List entryList = new ArrayList(map.entrySet());

1、Entry 통과 Map 자바 를 옮 겨 다 니 는 키 로 존재 하 는 방식 을 Map.Entry 라 고 합 니 다.Map.entry Set()는 key-value 집합 을 되 돌려 줍 니 다.이것 은 매우 효율 적 인 옮 겨 다 니 는 방식 입 니 다.
특히 JDK 1.5 이전 에는 Iterator 를 자주 사용 합 니 다.
for(Entry entry: map.entrySet()) {
// get key
K key = entry.getKey();
// get value
V value = entry.getValue();
}
 
2.Key 를 통 해 Map 정렬 을 하려 면 Map 의 ke 를 자주 조작 해 야 합 니 다.한 가지 방식 은 비교 기(comparator)를 통 해 )자,실현:
Iterator itr = map.entrySet().iterator();
while(itr.hasNext()) {
Entry entry = itr.next();
// get key
K key = entry.getKey();
// get value
V value = entry.getValue();
}
  또 다른 방법 은 Sorted Map 을 통 해 컴 파 라 블 인 터 페 이 스 를 실현 해 야 한 다 는 것 이다.
List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {

@Override
public int compare(Entry e1, Entry e2) {
return e1.getKey().compareTo(e2.getKey());
}

});
 
3.value 에 대해 맵 을 정렬 하 는 것 은 이전 과 유사 합 니 다.코드 는 다음 과 같 습 니 다.
SortedMap sortedMap = new TreeMap(new Comparator() {

@Override
public int compare(K k1, K k2) {
return k1.compareTo(k2);
}

});
sortedMap.putAll(map);
 
4.static 의 상수 맵 을 초기 화 합 니 다.전체 정적 맵 을 만 들 려 고 할 때 우 리 는 다음 과 같은 두 가지 방식 이 있 고 스 레 드 가 안전 합 니 다.Test 1 에서 우 리 는 map 가 정적 이 라 고 밝 혔 지만 초기 화 할 때 우 리 는 그것 의 값 을 바 꿀 수 있 습 니 다.예 를 들 어 Test1.map.put(3,"three")와 같 습 니 다.Test 2 에서 내부 클래스 를 통 해 수정 할 수 없 는 것 으로 설정 합 니 다.Test2.map.put(3,"three")를 실행 할 때 Unsupported Operation Exception 을 던 집 니 다. 이상 하 게 당신 이 수정 하 는 것 을 금지 합 니 다.
List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {

@Override
public int compare(Entry e1, Entry e2) {
return e1.getValue().compareTo(e2.getValue());
}

});
 
5.HashMap,TreeMap,and Hashtable 간 의 차이 점 은 Map 인터페이스 에서 모두 세 가지 실현 이 있 는데 그것 이 바로 HashMap,TreeMap,Hashtable 이다.그것들 사이 에는 각각 다른 것 이 있 으 니 상세 한 내용 은 을 참고 하 시기 바 랍 니 다. HashMap vs.TreeMap vs.Hashtable vs.LinkedHashMap 라 는 글.
6.Map 의 역방향 조 회 는 우리 가 Map 에 키 값 쌍 을 추가 한 후에 이것 은 Map 에서 키 와 값 이 일일이 대응 하 는 것 을 의미 하고 하나의 키 는 하나의 값 에 대응 하 는 것 을 의미한다.그러나 가끔 은 역방향 조회 가 필요 합 니 다.예 를 들 어 특정한 값 을 통 해 키 를 찾 아야 합 니 다.이런 데이터 구 조 는 bidirectional map 라 고 불 립 니 다.안 타 깝 게 도 JDK 는 지원 하지 않 았 습 니 다.Apache 와 Guava 는 공동으로 이러한 bidirectional map 를 제공 합 니 다.이 는 실현 과정 에서 키 와 값 이 모두 1:1 이 어야 한 다 는 관 계 를 규정 합 니 다.
7.맵 의 복사 자바 에 서 는 하나의 맵 에 대한 복 제 를 실현 할 수 있 는 많은 방법 을 제공 하지만 그 방법 들 이 항상 동기 화 되 지 는 않 습 니 다.쉽게 말 하면 하나의 맵 에 변화 가 생 겼 고 복 제 된 것 은 그대로 유지 되 었 다.다음은 비교적 효율 적 인 실현 방법 이다.
public class Test1 {

private static final Map map;
static {
map = new HashMap();
map.put(1, “one”);
map.put(2, “two”);
}
}

public class Test2 {

private static final Map map;
static {
Map aMap = new HashMap();
aMap.put(1, “one”);
aMap.put(2, “two”);
map = Collections.unmodifiableMap(aMap);
}
}
  물론 복제 하 는 또 다른 방법 이 있다.그러나 우리 자바 의 원조 인 Josh Bloch 는 이런 방식 을 추천 하지 않 았 다.그 는 한 인터뷰 에서 Map 복제 에 관 한 문 제 를 말 한 적 이 있다.여러 가지 중에서 복제 방법 을 제공 했다.왜냐하면 사람들 이 확실히 필요 하기 때문이다.그러나 복 제 는 매우 한계 가 있 고 불필요 한 영향 을 미 칠 때 가 많다.원문(Copy constructor versus cloning))
8.빈 맵 을 만 듭 니 다.이 맵 을 사용 할 수 없 는 맵 으로 설정 하면 다음 과 같이 실현 할 수 있 습 니 다.
4.567913.반대로 우리 가 사용 할 때 바로
Map copiedMap = Collections.synchronizedMap(map);
  itxxz

좋은 웹페이지 즐겨찾기