2010-02-28 4 views
35

Java에서 Hashtable을 가지고 있고 반복하는 동안 특정 키 - 값 쌍을 삭제하고 테이블의 모든 값을 반복하려고합니다.Java의 Hashtable에서 반복 및 삭제

어떻게 처리 할 수 ​​있습니까?

+0

같은 : http://stackoverflow.com/questions/46898/iterate-over -each-entry-in-a-map –

답변

37

당신은, 오히려 MapInteger의, String쌍을 통해 자바 6. 다음의 예 반복에서 사용할 수있는 향상된에 대한 루프 구문을 사용 할 수있는 것보다 설정 Map의 항목을 반복 명시 적 java.util.Iterator를 사용할 필요가

List<String> keyList = new ArrayList<String>; 

for(Map.Entry<String,String> entry : hashTable){ 
    if(entry.getValue().equals("delete")) // replace with your own check 
    keyList.add(entry.getKey()); 
} 

for(String key : keyList){ 
    hashTable.remove(key); 
} 

당신에게 : 그 Integer 키 null의 경우, 또는 0

Map<Integer, String> map = ... 

Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator(); 

while (it.hasNext()) { 
    Map.Entry<Integer, String> entry = it.next(); 

    // Remove entry if key is null or equals 0. 
    if (entry.getKey() == null || entry.getKey() == 0) { 
    it.remove(); 
    } 
} 
+5

'Hashtable '에'null'키를 사용할 수 없습니다. 그것이지도와 다른 점입니다. 또한 위의 코드에서'getKey' 대신'Map.Entry getValue'를 쿼리합니다. 값이'String' 타입이므로'entry.getValue() == 0'을 할 수 없습니다. – polygenelubricants

+1

@polygenelubricants, Map은 null에 대한 제한이없는 인터페이스입니다. HashMap는 null을 허용하지 않는 Map 구현입니다. –

+1

내 코드에서 Hashtable을 참조하지 않으며 HashMap에 의해 대체되었으므로 어쨌든 사용하지 않을 것입니다. **는 null 키와 값을 허용합니다 **. – Adamski

4

당신은 임시 삭제 목록을 사용할 수 있습니다 같다 모든 항목을 제거 Java API

+1

이렇게 할 수는 있지만 추가 컬렉션을 사용할 필요는 없습니다. 그것은 단지 일을 더욱 복잡하게 만듭니다. – Adamski

6

미리보기에서 삭제할 키, 값 쌍을 알고 계십니까? 그런 다음,이 일을 단지 더 명확입니다 :

table.delete(key); 
for (K key: table.keySet()) { 
    // do whatever you need to do with the rest of the keys 
} 
+0

나는이 값을 알기 때문에 작동하지 않을 것이다. 찾는 데 감사드립니다. –

41

사용할 수 Enumeration :

의 HashMap과 다른 맵
Hashtable<Integer, String> table = ... 

Enumeration<Integer> enumKey = table.keys(); 
while(enumKey.hasMoreElements()) { 
    Integer key = enumKey.nextElement(); 
    String val = table.get(key); 
    if(key==0 && val.equals("0")) 
     table.remove(key); 
}