1

我想检查两个arraylist,然后插入另一个arrayList。但是当我这样做时,我会得到重复的值。如何解决此问题并删除重复项。我将获取中位数并检查中位数是否大于或小于然后将值插入第三个数组列表中。

public static void cluster() {
  Kmeans kk = new Kmeans();
  for (int x = 0; x < cluster1.size() && cluster1 != null; x++) {
    for (int y = 0; y < cluster2.size() && cluster2 != null; y++) {
      String s1 = cluster1.get(x);
      String s2 = cluster2.get(y);
      try {
        int median = kk.distance(s1, s2);
        if (s1.length() > median) {
          kmcluster1.add(s1);
          kmcluster2.add(s2);
        }
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      }
    }
  }
}
public static int median(String q, String w) {
  int h = q.length();
  int h1 = w.length();
  int kk = 0;
  if (h > h1) {
    kk = h - h1;
    return kk;
  } else kk = h1 - h;
  return kk;
}
4

2 回答 2

2

ArrayLists 通过设计允许重复值。如果您想要一个禁止重复的数据结构,请考虑使用 a 的实例Set

于 2013-04-29T16:28:22.217 回答
1

您的代码中有一个错误:

x < cluster1.size() && cluster1 != null; // will not prevent a null pointer exception

您应该使用

cluster1 != null && x < cluster1.size();

或者最好在进入循环之前只做一次 NULL 检查。

而且,是的,要回答您的问题,请使用 aHashSet而不是ArrayList. 它将悄悄地忽略添加重复项(不抛出异常)。按如下方式实例化您的集群:

Set<String> kmcluster1 = new HashSet<String>();
Set<String> kmcluster2 = new HashSet<String>();

每当您不希望数据结构包含任何重复项时,请使用HashSet代替ArrayListLinkedHashSet代替。LinkedList

于 2013-04-29T16:33:50.603 回答