在java中计算arrayList中的重复整数对
我有一个算法要运行,在其中一个步骤中,我必须在一个名为PairList的列表中找到重复的对,对它们进行计数,并消除小于特定参数minSupp的对。这是我将对添加到PairList的代码在java中计算arrayList中的重复整数对,java,arraylist,count,duplicates,Java,Arraylist,Count,Duplicates,我有一个算法要运行,在其中一个步骤中,我必须在一个名为PairList的列表中找到重复的对,对它们进行计数,并消除小于特定参数minSupp的对。这是我将对添加到PairList的代码 for (int i = sizes.get(sequence.getId())-maxError ; i <= sizes.get(sequence.getId())-1; i++){ for(int j = i+1; j<sizes.get(sequence.getId
for (int i = sizes.get(sequence.getId())-maxError ; i <= sizes.get(sequence.getId())-1; i++){
for(int j = i+1; j<sizes.get(sequence.getId()); j++){
//Get the first Item
int first = sequence.getItemsets().get(i);
//gets the second Item
int second =sequence.getItemsets().get(j);
//Generate pattern as pair
Pair pattern = new Pair(first, second);
sequenceID = sequence.getId();
//Generate triples with sequence ID and pair
Triples triples = new Triples(sequenceID, i, j);
if (!pairList.contains(pattern)){
//adds if it doesn't exist
pairList.add(pattern);
}
我一直在努力,这是我的代码,直到现在,但它给了我一个输出远远超过我想要的,所以请帮助
for(Pair pair : pairList){
int a = Collections.frequency(pairList, pair);
for (int i=0 ; i<pairList.size() ; i++){
for (int j =i+1 ; j<pairList.size()-1;j++){
if (pairList.get(i).getX()==pairList.get(j).getX() && pairList.get(i).getY()==pairList.get(j).getY() ){
a++;
System.out.println(pair + ": " + a);
}
如果在pair类中实现了equals,那么Collections.frequency已经足够在列表中查找一对的频率。因此,嵌套for循环是多余的。
只需通过.remove即可删除配对。如果希望每一对仅打印一次,则可以将列表添加到集合中,然后迭代,还需要实现哈希代码:
有关如何正确实现hashCode和equals的更多信息,请查看以下问题:重写Pair类的hashCode和equals方法,并使用Collections.frequency。我在Pair类中实现了equals,当我尝试您的代码时,它会给出以下输出3,28:1 remove 3,28:1 remove。。。。所以它不会计算频率,或者它不会给我3,28:3,因为之后我必须再次使用这个数字。你确定你正确地实现了equals吗?建议的代码对我很有用。我忘记的是,为了让HashSet正常工作,还需要重写hashCode。我添加了一个链接,指向如何正确覆盖这两个方法的一个非常好的解释。为了快速测试它,我使用了:return x+y;//可能会发生碰撞!对于hashCode和Pair=Pair y;返回this.x==that.x&&this.y==that.y;为了平等。注意:您应该只使用该实现进行快速测试,然后按照我添加的链接正确实现这些方法。这是我的equals from Pair类。我不知道这是怎么回事?public boolean equalsPair pair{boolean status=false;ifthis.getX!=pair.getX{status=true;}ifthis.getY!=pair.getY{status=true;}System.out.printlnstatus;返回状态;}@Override public String to String{return+x+,+y+;}equals必须有一个对象作为参数->public boolean equals Object obj。然后,在进行属性比较之前,必须将该对象转换为一对。有关详细信息,请参阅我添加到答案中的链接。
for(Pair pair : pairList){
int a = Collections.frequency(pairList, pair);
for (int i=0 ; i<pairList.size() ; i++){
for (int j =i+1 ; j<pairList.size()-1;j++){
if (pairList.get(i).getX()==pairList.get(j).getX() && pairList.get(i).getY()==pairList.get(j).getY() ){
a++;
System.out.println(pair + ": " + a);
}
for (Pair pair : new HashSet<Pair>(pairList)) { // a set has no double entries
int frequency = Collections.frequency(pairList, pair);
System.out.print(pair + " : " + frequency); // print frequency of pair
if (frequency < minSupp) { // if frequency is too low remove this pair
while (pairList.remove(pair)); // remove all occurrences of this pair
System.out.print(" remove");
}
System.out.println();
}