我有一个包含(点,值)的哈希图,我计算了哈希图中的最小值。其次,我使用返回点从矩阵中提取相应的值。 然后我存储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
答案 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
的第一项上立即返回xMin
: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.