我想检查两个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;
}
答案 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
代替ArrayList
和LinkedHashSet
代替LinkedList
。