2013-09-30 65 views
1

我有一個列表,其格式爲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

我嘗試了分配,但是我沒有找到反正。因爲我們無法從HashMap檢索基於index的值。我們可以根據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; 
} 

任何人都可以推薦我。

+0

你對這三套或大套本身的大小感興趣嗎? – isnot2bad

+0

假設你正在做一些'有趣的事情',並且實際上想自己找出解決方案,這裏有一個提示:在我看來,你似乎沒有想過使用for循環迭代哈希映射的值,而沒有指數,例如'for(Point3d point:coOrdinates.values()){...}'。您的解決方案只是更多的代碼。 –

+0

我建議你實現你自己的Map類。 – 2013-09-30 11:44:19

回答

0

你可以按照下面的步驟,

  1. HashMap的值轉換爲一組與您的自定義Comparator
  2. 實施您的compare方法。
  3. 返回設定的尺寸。

的片段看起來像下面,

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(); 
} 
-1
for (Map.Entry<Integer, Point3d> entry : coOrdinates.entrySet()) { 
    Point3d point = entry.getValue()); 
} 
+0

這是不完整的。 – ftr

0

您可以使用這樣的鍵時,會從地圖元素:

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

你認爲以下的內容:

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

return values.size(); 
+0

設置爲自動去重複 - 但點沒有方法x()。 –

+0

我的Point3d類有一個方法x()! ;) – isnot2bad

+0

@BuzzMoschetti我不知道在問題中使用了哪個Point3d類,因爲在標準Java中我沒有注意到這樣的類。所以我只是假設它有一個x()或getX()方法。 – isnot2bad

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); 
    } 
相關問題