자바 에서 맵 을 옮 겨 다 니 는 몇 가지 방법 요약

6321 단어 자바
     for-each     entries   

                         。         。

Map map = new HashMap();

for (Map.Entry entry : map.entrySet()) {

    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

메모:for-each 순환 은 자바 5 에 도입 되 었 기 때문에 이 방법 은 자바 5 또는 더 높 은 버 전에 만 적용 할 수 있 습 니 다.빈 맵 대상 을 옮 겨 다 니 면 for-each 순환 은 NullPointer Exception 을 던 집 니 다.따라서 옮 겨 다 니 기 전에 빈 인용 을 확인 해 야 합 니 다.방법 2.for-each 순환 에서 keys 나 values 를 옮 겨 다 닙 니 다.맵 의 키 나 값 만 필요 하 다 면 엔 트 리 셋 이 아 닌 키 세트 나 values 를 통 해 옮 겨 다 닐 수 있 습 니 다.
Map map = new HashMap();

//맵 의 키 를 옮 겨 다 니 기
for (Integer key : map.keySet()) {

    System.out.println("Key = " + key);

}

//맵 의 값 옮 겨 다 니 기
for (Integer value : map.values()) {

    System.out.println("Value = " + value);

}

이 방법 은 entry Set 보다 성능 적 으로 옮 겨 다 니 는 것 이 좋 습 니 다.
Map map = new HashMap();

Iterator> entries = map.entrySet().iterator();

while (entries.hasNext()) {

    Map.Entry entry = entries.next();

    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

일반 모드 사용 하지 않 음:
Map map = new HashMap();

Iterator entries = map.entrySet().iterator();

while (entries.hasNext()) {

    Map.Entry entry = (Map.Entry) entries.next();

    Integer key = (Integer)entry.getKey();

    Integer value = (Integer)entry.getValue();

    System.out.println("Key = " + key + ", Value = " + value);

}

방법 4.키 를 통 해 값 을 찾 아 옮 겨 다 니 기(효율 이 낮 음)
Map map = new HashMap();

for (Integer key : map.keySet()) {

    Integer value = map.get(key);

    System.out.println("Key = " + key + ", Value = " + value);

}

자바 구체 적 인 테스트 코드 클래스:
 
  
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
//    map   
public class CircleMap {
 public static void main(String[] args) {
  Map tempMap = new HashMap();
  tempMap.put("a", 1);
  tempMap.put("b", 2);
  tempMap.put("c", 3);
  // JDK1.4 
  //       hashmap entrySet()   
  System.out.println("   ");
  Iterator it = tempMap.entrySet().iterator();
  while (it.hasNext()) {
   Map.Entry entry = (Map.Entry) it.next();
   Object key = entry.getKey();
   Object value = entry.getValue();
   System.out.println("key=" + key + " value=" + value);
  }
  System.out.println("");
  // JDK1.5 ,     For-Each  
  //      
  System.out.println("   ");
  for (Map.Entry entry : tempMap.entrySet()) {
   String key = entry.getKey().toString();
   String value = entry.getValue().toString();
   System.out.println("key=" + key + " value=" + value);
  }
  System.out.println("");
  //       hashmap keySet()   
  System.out.println("   ");
  for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) {
   Object obj = i.next();
   System.out.println(obj);//     key
   System.out.println("key=" + obj + " value=" + tempMap.get(obj));
  }
  for (Iterator i = tempMap.values().iterator(); i.hasNext();) {
   Object obj = i.next();
   System.out.println(obj);//     value
  }
  System.out.println("");
  //       treemap keySet()  
  System.out.println("   ");
  for (Object o : tempMap.keySet()) {
   System.out.println("key=" + o + " value=" + tempMap.get(o));
  }
  System.out.println("11111");
  // java    Map  map = new HashMap ();
  System.out
    .println("java    Map  map = new HashMap
();");
  Map map = new HashMap();
  Set keys = map.keySet();
  Iterator iterator = keys.iterator();
  while (iterator.hasNext()) {
   String key = iterator.next();
   ArrayList arrayList = map.get(key);
   for (Object o : arrayList) {
    System.out.println(o + "    ");
   }
  }
  System.out.println("2222");
  Map mapList = new HashMap();
  for (Map.Entry entry : mapList.entrySet()) {
   String key = entry.getKey().toString();
   List values = (List) entry.getValue();
   for (String value : values) {
    System.out.println(key + " --> " + value);
   }
  }
 }
}

요약 키(keys)나 값(values)만 필요 하 다 면 사용 방법 2.만약 당신 이 사용 하 는 언어 버 전이 자바 5 보다 낮 거나,여러 번 에 걸 쳐 entries 를 삭제 하려 면,반드시 사용 방법 3 을 사용 해 야 합 니 다.그렇지 않 으 면 사용 방법 1.
효율 문제:
하면,만약,만약...
키 와 value 를 동시에 옮 겨 다 닐 때 키 세트 와 entry Set 방법의 성능 차 이 는 키 의 구체 적 인 상황,예 를 들 어 복잡 도(복잡 대상),이산 도,충 돌 률 등에 달 려 있다.HashMap 에서 value 를 찾 는 비용 에 달 려 있다 는 얘 기다.entry Set 에서 모든 key 와 value 를 한꺼번에 꺼 내 는 작업 은 성능 비용 이 있 습 니 다.이 손실 이 HashMap 에서 value 를 찾 는 비용 보다 적 을 때 entry Set 의 성능 장점 이 나타 납 니 다.예 를 들 어 상기 대비 테스트 에서 key 가 가장 간단 한 수치 문자열 일 때 keyset 은 오히려 효율 적 이 고 entry Set 보다 10%적 을 수 있 습 니 다.전체적으로 엔 트 리 세트 를 추천 합 니 다.키 가 간단 할 때 그 성능 은 키 세트 보다 약간 낮 을 수도 있 지만 제어 할 수 있 기 때문이다.한편,key 의 복잡 화 에 따라 entry Set 의 장점 이 뚜렷하게 나타 날 것 이다.물론,우 리 는 실제 상황 에 따라 key 만 옮 겨 다 닐 때 keyset 방법 을 선택 할 수 있 습 니 다.entry Set 은 쓸모없는 value 도 꺼 내 성능 과 공간 을 낭비 하기 때 문 입 니 다.상기 테스트 결과 에 따 르 면 keyset 은 entry Set 방법 보다 23%가 적다.value 만 옮 겨 다 닐 때 vlues 방법 을 사용 하 는 것 이 가장 좋 습 니 다.entry Set 은 keyset 방법 보다 약간 좋 습 니 다.
하면,만약,만약...
key 와 value 를 동시에 옮 겨 다 닐 때 HashMap 과 달리 entry Set 의 성능 은 keyset 보다 훨씬 높 습 니 다.이것 은 TreeMap 의 조회 효율 에 의 해 결정 된다.즉,TreeMap 에서 value 를 찾 는 비용 이 비교적 많 고 entry Set 에서 모든 key 와 value 를 한꺼번에 꺼 내 는 비용 보다 현저히 높다.따라서 TreeMap 을 옮 겨 다 닐 때 entry Set 방법 을 강력 히 추천 합 니 다.

좋은 웹페이지 즐겨찾기