2015-07-21 37 views
2

在Entry Map中的所有元素中,我只能删除至少一个元素的位置。任何人都可以解释什么原因?无法删除java.util.Map.Entry中的所有元素

PS:我觉得问题在EntryMap与HashMap的

这是全码:

import java.util.HashMap; 

import java.util.Map; 

import java.util.Map.Entry; 

import java.util.Scanner; 

public class Neti { 

    static Map<Integer, String> mm = new HashMap<>(); 

    static void removeEntry(Integer val) { 

     for (Entry<Integer, String> entry : mm.entrySet()) { 

      if (entry.getKey() == val) { 

       mm.remove(val); 

       break; 
      } 
     } 
    } 

    public static void main(String[] args) { 
     mm.put(123, "one"); 
     mm.put(1234, "two"); 
     mm.put(12345, "three"); 
     mm.put(123456, "four"); 

     Scanner scanner = new Scanner(System.in); 
     System.out.println("We have: " + mm); 
     for (;;) { 
      System.out.print("Number to remove: "); 

      int val = scanner.nextInt(); 

      removeEntry(val); 
      System.out.println("Map entries are: " + mm.toString()); 
     } 
    } 

} 
+2

使用等于而不是==比较整数 – Eran

+0

@Eran:谢谢:D,但为什么我使用==它不会运行正确? – Hoang

+1

'=='比较引用。如果创建两个具有相同值的Integer实例(假设它不在IntellCache的范围内,即-128到127),它们不是同一个对象,所以即使它们具有相同的“int”值。 – Eran

回答

3

你的整个removeEntry方法可以通过一个单独的语句来代替 - mm.remove(val)。没有必要遍历entrySet找到你想要删除的密钥,即使有,使用==作为参考类型通常是错误的。