从hashmap中删除一个值,如果key为空,也删除该键

时间:2015-02-24 04:36:21

标签: java hashmap

public NobelPrizeWinners()
{
    winners = new HashMap<Integer, String[]>();

    String[] people = new String[1];
    people[0] = "Barack H. Obama";
    winners.put(new Integer(2009), people);

    people = new String[1];
    people[0] = "Martti Ahtisaari";
    winners.put(new Integer(2008), people);

    people = new String[2];
    people[0] = "Intergovernmental Panel on Climate Change (IPCC)";
    people[1] = "Albert Arnold (Al) Gore Jr.";
    winners.put(new Integer(2007), people);

    people = new String[2];
    people[0] = "Muhammad Yunus";
    people[1] = "Grameen Bank";
    winners.put(new Integer(2006), people);
   }
public void removeWinner(String nameOfWinnerToRemove)
{
    Set<Integer> allYears = winners.keySet();
    for(Integer year : allYears)
    {
        String[] eachYearWinners = winners.get(year);

        for (String winner : eachYearWinners) 
        {
            if(winner.equalsIgnoreCase(nameOfWinnerToRemove))
            {
                winners.remove(year, nameOfWinnerToRemove);

                if(eachYearWinners.length < 1)
                {
                    winners.remove(year);
                }
            }
        }
    }
}

我想删除用户提供的获胜者(nameOfWinnerToRemove),如果没有匹配的名称则不执行任何操作。并且,如果键为空,则删除键(整数)。 就像,我想删除&#34; Barack H. Obama&#34;在2009年,如果我这样做,2009年将会出现空白,那么我必须删除2009年。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

重要的是,如果要在迭代时从集合中删除任何值,请使用集合提供的Iterator

请检查以下代码是否适合您。

public void removeWinner(String nameOfWinnerToRemove)
    {
        Iterator<Integer> iterator  = winners.keySet().iterator();

        //for(Integer year : allYears)
        while(iterator.hasNext())
        {
            Integer year = iterator.next();
            String[] eachYearWinners = winners.get(year);

            for (String winner : eachYearWinners)
            {
                if(winner.equalsIgnoreCase(nameOfWinnerToRemove))
                {

                    //winners.remove(year, nameOfWinnerToRemove); // ??? What is data type of winners I cant find remove method in a map that accepts two parameters
                    if(eachYearWinners.length < 1)
                    {
                        iterator.remove();// You should use Iterators Remove Method when you want to remove key in the iteration
                       // winners.remove(year);
                    }
                }
            }
        }
    }