자바 에서 맵 을 옮 겨 다 니 는 여러 가지 방법 예제 및 장단 점 총화

머리말
자바 에 있 는 맵 은 여러 가지 방법 이 있 습 니 다.최초의 Iterator 부터 자바 5 가 지원 하 는 foreach,그리고 자바 8 Lambda 까지 구체 적 인 용법 과 각자 의 장단 점 을 살 펴 보 겠 습 니 다.
맵 을 초기 화 합 니 다.

public class TestMap {
 public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();
}
keySet values
맵 의 키 나 value 만 필요 하 다 면 맵 의 키 세트 나 values 방법 을 사용 하 는 것 이 가장 편리 하 다

 // KeySet   key
 public void testKeySet() {
 for (Integer key : map.keySet()) {
  System.out.println(key);
 }
 }
 // values   value
 public void testValues() {
 for (Integer value : map.values()) {
  System.out.println(value);
 }
 }
keySet get(key)
key 와 value 를 동시에 가 져 올 필요 가 있다 면 key 를 가 져 온 다음 mapget(key)를 통 해 value 를 가 져 올 수 있 습 니 다.
설명 이 필요 한 것 은 이 방법 이 가장 좋 은 선택 이 아니 라 일반적으로 추천 하지 않 는 다 는 것 이다.

 // keySet get(key)   key and value
 public void testKeySetAndGetKey() {
 for (Integer key : map.keySet()) {
  System.out.println(key + ":" + map.get(key));
 }
 }
entrySet
map entry Set 를 옮 겨 다 니 면서 key 와 value 를 동시에 얻 을 수 있 습 니 다.일반적인 상황 에서 성능 이 이전 보다 좋 습 니 다.이것 도 가장 자주 사용 하 는 옮 겨 다 니 는 방법 입 니 다.

 // entrySet   key and value
 public void testEntry() {
 for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
  System.out.println(entry.getKey() + ":" + entry.getValue());
 }
 }
Iterator
위의 몇 가지 foreach 는 Iterator 로 대체 할 수 있 습 니 다.사실 foreach 는 자바 5 에서 만 지원 되 고 foreach 의 쓰기 가 더욱 간결 해 보 입 니 다.
그러나 Iterator 도 장점 이 있 습 니 다.foreach 로 map 를 옮 겨 다 닐 때 크기 를 바 꾸 면 오류 가 발생 하지만 요 소 를 삭제 하 는 경우 Iterator 의 reove 방법 으로 요 소 를 삭제 할 수 있 습 니 다.

 // Iterator entrySet   key and value
 public void testIterator() {
 Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
 while (it.hasNext()) {
  Map.Entry<Integer, Integer> entry = it.next();
  System.out.println(entry.getKey() + ":" + entry.getValue());
  // it.remove();     
 }
 }
Lambda
java 8 은 Lambda 표현 식 지원 을 제공 합 니 다.문법 이 더욱 간결 해 보이 고 key 와 value 를 동시에 얻 을 수 있 습 니 다.그러나 테스트 를 통 해 성능 이 entry Set 보다 낮 기 때문에 entry Set 방식 을 추천 합 니 다.

 // Lambda   key and value
 public void testLambda() {
 map.forEach((key, value) -> {
  System.out.println(key + ":" + value);
 });
 }
단순 성능 테스트
10 만 개의 데이터 로 간단 한 성능 테스트 를 했 는데 데이터 유형 은 Integer 이 고 map 는 HashMap 을 선택 합 니 다.

 static {
 for (int i = 0; i < 100000; i++) {
  map.put(i, 1);
 }
 }
테스트 결 과 는 다음 과 같다.

KeySet:   392
Values:   320
keySet get(key): 552
entrySet:   465
entrySet Iterator:508
Lambda:   536
설명 이 필요 한 것 은 map 에 저 장 된 데이터 형식,map 의 크기,그리고 map 의 서로 다른 실현 방식 이 옮 겨 다 니 는 성능 에 영향 을 줄 수 있 기 때문에 이 테스트 결 과 는 참고 하 시기 바 랍 니 다.
총결산
  • key 나 value 만 가 져 오 면 keySet 이나 values 방식
  • 을 추천 합 니 다.
  • key 와 value 가 동시에 필요 하 다 면 entry Set
  • 을 추천 합 니 다.
  • 옮 겨 다 니 는 과정 에서 요 소 를 삭제 하려 면 Iterator
  • 를 추천 합 니 다.
  • 옮 겨 다 니 는 과정 에서 요 소 를 추가 해 야 한다 면 임시 맵 을 새로 만 들 고 새로 추 가 된 요 소 를 저장 할 수 있 습 니 다.옮 겨 다 니 기 를 기다 리 고 임시 맵 을 원래 맵 에 넣 을 수 있 습 니 다
  • 자,이상 이 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기