Как очистить временный список после итерации - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь построить кластеры так, чтобы каждый найденный минимум х, мы собираем соответствующие точки и строим элемент кластера х3: [x1, x2].

для этого я использую список для хранения соответствующих точек, а затем вставляю их для каждого элемента хэш-карты.

Проблема в том, что временный список обновляется для всех элементов, давая мне что-то вроде

3 [4, 2, 5, 1, 0]
4 [4, 2, 5, 1, 0]

, в то время как ожидаемый результат -

1 [ 1, 0]
3 [3]
4 [4, 2, 5]

Вот что я пробовал:

    ConcurrentHashMap<Integer, Double> E = new ConcurrentHashMap();
    HashSet<Integer> dataPoints = new HashSet(); 
    HashMap<Integer, List<Integer>> clusters = new HashMap<>();
    List<Integer> l = new ArrayList<>(); //list of corresponding points for each xmin
    System.out.println("size one :" + dataPoints.size());

    while (!E.isEmpty()) {
      int xMin = getKey(E, MinX(E, dataPoints));
      System.out.println("you re " + xMin);
      dataPoints.add(xMin);
      l.add(xMin);
      System.out.println("Xmin " + xMin);
      E.remove(xMin);
      //checking id X exists in data points if no  return  close elements
      for (int j = 0; j < S.getRow(xMin).length; j++) {
        if (!dataPoints.contains(j) ) {
          if (S.getEntry(xMin, j) > beta) {
            System.out.println(j);

            dataPoints.add(j);
            l.add(j);
            E.remove(j);
          }
        }
        clusters.put(xMin, l);
      }
    }

What am I missing
...