ArrayList打印重复值

时间:2013-04-29 16:25:18

标签: java arraylist duplicate-removal

我想检查两个arraylist然后插入另一个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;
}

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您的代码中存在错误:

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

你应该使用

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

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

并且,是的,要回答您的问题,请使用HashSet代替ArrayList。它会静静地忽略重复的添加(不抛出异常)。按如下方式实例化您的群集:

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

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