遍历哈希图并计算最小值和最小值时停止

时间:2019-04-19 09:40:39

标签: java arraylist hashmap min

我有一个包含(点,值)的哈希图,我计算了哈希图中的最小值。其次,我使用返回点从矩阵中提取相应的值。 然后我存储xmmin,然后将点返回到arraylist中

我的目标是不考虑数组列表中是否已经存在一个点。 我已经尝试过了,但是第一分钟就卡住了。

这是我尝试过的

       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

2 个答案:

答案 0 :(得分:1)

您的ifExists应该是

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

答案 1 :(得分:1)

当前,您的existsX方法包含以下内容:

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

如果您要执行相反的操作,则将在不是false的第一项上立即返回xMintrue结束后立即返回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.