值不会在Java中的HashMap中迭代

时间:2015-06-06 17:19:33

标签: java iterator hashmap

初始化HashMap后,将插入值。但在尝试打印值时,不会打印所有值。我正在尝试解决this问题。

代码如下:

import java.util.Scanner;
import java.util.HashMap;
import java.util.Iterator;

public class test
{
    public static void main(String args[]) throws Exception
    {
        Scanner input = new Scanner(System.in);
        String inputString = input.next();
        int cases = input.nextInt();
        long max = 0;
        HashMap<Long, Long> points = new HashMap<>();
        while(cases>0)
        {
            points.put(input.nextLong(), input.nextLong());
            cases--;
        }
        Iterator iterator = points.keySet().iterator();
        while(iterator.hasNext())
        {
            long x = (Long)iterator.next();
            long y = points.get(x);
            if(x>max)
                max = x;
            if(y>max)
                max = y;
        }
        while(inputString.length()<=max)
            inputString = inputString.concat(inputString);

        iterator = points.keySet().iterator();
        while(iterator.hasNext())
        {
            long x = (Long)iterator.next();
            long y = points.get(x);
            System.out.println("x: "+x+" y: "+y);
/*          if(inputString.charAt(new Long(x-1).intValue()) == inputString.charAt(new Long(y-1).intValue()))
                System.out.println("Yes");
            else
                System.out.println("No");*/
        }
    }
}

输出:

enter image description here

不打印值2和4。它们不是由HashMap迭代的。有什么问题?

2 个答案:

答案 0 :(得分:5)

每个键只能有一个值。

如果将值4置于键2,然后将值5置于同一键,则覆盖旧值。只有最后一个(5)保留在地图中。

答案 1 :(得分:1)

根本问题是您使用的是错误的数据结构。你没有使用它是地图的事实。您只能将它用作点列表。最好的解决方案是用点列表替换它,如以下程序所示:

import java.util.ArrayList;
import java.util.List;

public class Test {
  public static void main(String[] args) {
    List<int[]> points = new ArrayList<int[]>();
    points.add(new int[]{2,4});
    points.add(new int[]{2,5});
    points.add(new int[]{7,14});
    for(int[] point : points){
      int x = point[0];
      int y = point[1];
      System.out.println("x: "+x+" y: "+y);
    }
  }
}

输出:

x: 2 y: 4
x: 2 y: 5
x: 7 y: 14