如果ArrayList中有重复的对象,如何返回true?

时间:2014-01-15 02:24:31

标签: java eclipse arraylist boolean duplicates

用Java编写一个方法,查看已填充随机卡的ArrayList个对象(特别是“卡”对象,其中包含卡的编号和套装)。该方法返回一个布尔值,无论ArrayList是否包含重复。

到目前为止,我已经在for循环中尝试了for循环,但我没有走得太远。

另外,我需要另一种返回重复卡的方法,但是在尝试之前我需要先完成第一个方法。

3 个答案:

答案 0 :(得分:3)

这就是你通常会发现重复的方式:

public static bool findDuplicates(List<Card> listContainingDuplicates) {

        final Set<Card> set1 = new HashSet<Card>();

        for (Card yourCard : listContainingDuplicates) {
            if (!set1.add(yourCard)) {
                return true;
            }
        }
        return false;
    }

答案 1 :(得分:0)

如果您的算法在空间上有限,请对列表进行排序,然后在班轮时间内查找重复值。该算法的总时间复杂度为O(nlogn)。

public boolean hadDuplicatedCards(List<Card> cards) {
        Collections.sort(cards);
        for (int i = 0; i < cards.size() - 1; i++) {
            if(cards.get(i).equals(cards.get(i+1))) {
                return true;
            }
        }
        return false;
    }

否则new一张HashSetadd张卡,如果HashSetadd方法中已存在相同的卡片,则会返回{ {1}}。

BTW,在排序方法中,您的true类需要实现Card接口,并且不要忘记覆盖Comparable方法。 在equals方法中,您只需覆盖HashSet方法。但要注意equals方法需要额外的O(n)空间。

感谢PM 77-1的评论。

答案 2 :(得分:0)

看看这个:http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html你可以使用indexOf和lastIndexOf。

在伪代码中:

myfunct(list, obj){
    if(list.indexOf(obj) == list.lastIndexOf(obj))
        return False;
    else
        return True; // Two or more ...
}