如何从hashMap中查找所有第一个值

时间:2013-09-30 11:36:01

标签: java

我有一个HashMap<Integer, Point3d>格式的列表,如下所示。

 {
   {key1,(x1,y1,z1)},
   {key2,(x2,y2,z2)},
   {key3,(x1,y3,z3)},
   {key4,(x1,y4,z4)},
   {key5,(x5,y5,z5)},
   ..
 }

首先,我要分离{x1,x2,x1,x1,x5}等所有点中的第一个元素,然后删除{x1,x2,x5}之类的重复项,最后结果的长度意味着{x1,x2,x5}.size()

我想以同样的方式实现Points的第二和第三个元素。

我尝试过分配,但我没有找到。因为我们无法根据HashMapindex检索值。我们可以根据Key value检索值但是我不知道Keyvalues hashMap。

我尝试了以下方式。

  public int xSideLength(HashMap<Integer, Point3d> coOrdinates) {
    int length=0;
    Set<Integer> keyValues=coOrdinates.keySet();
    Integer[] array=(Integer[]) keyValues.toArray();
    for (int index = 0; index < array.length; index++) {
        //logical code
    }
    return length;
}

任何人都可以建议我。

5 个答案:

答案 0 :(得分:2)

您如何看待以下内容:

Set<Integer> values = new HashSet<Integer>();
for(Point3d point : coordinates.values()) {
    values.add(point.x());
}

return values.size();

答案 1 :(得分:0)

您可以按照以下步骤进行操作

  1. HashMap的值放入带有自定义Comparator的设置中。
  2. 实施compare方法。
  3. 返回设定尺寸。
  4. 该片段如下所示,

    public int xSideLength(HashMap<Integer, Point3d> coOrdinates) {
        int length=0;
        Set<Point3d> values = new TreeSet<Point>(new Comparator<Point3d>() {
            @Override
            public int compare(Point3d e1, Point3d e2) {
                return e1.getX().compareTo(e2.getX());
            }
        });
        values.addAll(coOrdinates.values());
        return values.size();
    }
    

答案 2 :(得分:0)

您可以使用以下键从地图中获取元素:

Set<Integer> keyValues = coOrdinates.keySet();
for (Integer key : keyValues) {
    Point3d point = coOrdinates.get(key);   
    // Your logical code goes here.
}

答案 3 :(得分:0)

public static void zz() {
    Map<String,Point3d> m = new HashMap<String,Point3d>();

    m.put("k1", new Point3d(1.0, 1.0, 4.0));
    m.put("k2", new Point3d(2.0, 2.0, 2.0));
    m.put("k3", new Point3d(1.0, 3.0, 2.0));
    m.put("k4", new Point3d(1.0, 3.0, 4.0));
    m.put("k5", new Point3d(5.0, 3.0, 2.0));

    Set xvals = new HashSet();
    Set yvals = new HashSet();
    Set zvals = new HashSet();

    double[] coords = new double[3];
    for (Point3d p : m.values()) {
        p.get(coords);
        xvals.add(coords[0]);
        yvals.add(coords[1]);
        zvals.add(coords[2]);
    }

    System.out.println("# unique x: " + xvals.size() + ": " + xvals);
    System.out.println("# unique y: " + yvals.size() + ": " + yvals);
    System.out.println("# unique z: " + zvals.size() + ": " + zvals);
    }

答案 4 :(得分:-1)

for (Map.Entry<Integer, Point3d> entry : coOrdinates.entrySet()) {
    Point3d point = entry.getValue());
}