자바 맵 을 옮 겨 다 니 는 몇 가지 방법
맵 을 초기 화 합 니 다.
public class TestMap {
public static Map map = new HashMap();
}
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 를 가 져 온 다음 map 의 get (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 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> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry 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 를 사용 하 는 것 을 추천 합 니 다.
옮 겨 다 니 는 과정 에서 요 소 를 추가 해 야 한다 면 임시 맵 을 새로 만 들 고 새로 추 가 된 요 소 를 저장 할 수 있 습 니 다. 옮 겨 다 니 는 과정 에서 임시 맵 을 원래 맵 에 넣 을 수 있 습 니 다.
저자: zhaoguhong (조 고 홍) 출처:http://www.cnblogs.com/zhaoguhong/본 논문 의 판권 은 작가 와 블 로그 가든 이 공유 하고 있 으 니, 전재 할 때 출처 를 밝 혀 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.