在java中计算arrayList中的重复整数对

在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

我有一个算法要运行,在其中一个步骤中,我必须在一个名为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()); 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();
}