遍历哈希图并计算最小值并在没有剩余点时停止

Looping over a hashmap and calculate min and stop when no points left

我有一个包含(点,值)的hashmap,我计算hashmap中的最小值。其次,检索点我用它来从矩阵中提取相应的值。 然后我存储 xmmin,并在 arraylist

中检索到的点

我的objective是不考虑数组列表中已经存在的点。 我已经试过了,但它卡在了第一分钟。

这是我试过的

       List<Integer> dataPoints = new ArrayList(); // Storing parsed elements including Xmin           
       HashMap<Integer, List<Integer>> clusters = new HashMap<>();

       ArrayList<Integer> listt = new ArrayList<>();
       List<Integer> l = new ArrayList<>(); //list of points for each xmin
       while(E.size()!=dataPoints.size()) {
       int xMin = getKey(E,MinX(E));
       System.out.println("Xmin "+xMin);
       if (!existsX(dataPoints, xMin)) {

       dataPoints.add(xMin);

       //checking id X exists in data points if no  return  close elements
       for (int j = 0; j < S.getRow(xMin).length; j++) {
       if (S.getEntry(xMin, j) > beta) {

       l.add(j);
       dataPoints.add(j);          

                   }
               }
           }

这里是 IfExists 函数


       for (int k = 0; k < dataPoints.size(); k++) {
           if (dataPoints.get(k) != xMin) {
               return false;
           }

       }
       return true;

   }

How can I achieve that

你的ifExists应该是

   for (int k = 0; k < dataPoints.size(); k++) {
       if (dataPoints.get(k) == xMin) {
           return true;
       }
   }
   return false;

目前,您的 existsX-方法包含:

for (int k = 0; k < dataPoints.size(); k++) {
  if (dataPoints.get(k) != xMin) {
    return false;
  }
}
return true;

这将立即 return false 在第一个不是 xMin 的项目上,而你想完成相反的事情:return true 一旦发现 xMin 是这样的:

for (int k = 0; k < dataPoints.size(); k++) {
  if (dataPoints.get(k) == xMin) {   // != has been changed to ==
    return true;                     // Return true as soon as we've found it
  }
}
return false;                        // Return false if it wasn't found

然而,更好的方法是更多地依赖为您完成工作的内置函数。在这种情况下,您的:

if(!existsX(dataPoints,xMin))

可改为:

if(!dataPoints.contains(xMin))

所以您不需要制作自己的 existsX 方法。 Here the JavaDocs for the List#contains builtin.