用Java编写一个方法,查看已填充随机卡的ArrayList
个对象(特别是“卡”对象,其中包含卡的编号和套装)。该方法返回一个布尔值,无论ArrayList
是否包含重复。
到目前为止,我已经在for
循环中尝试了for
循环,但我没有走得太远。
另外,我需要另一种返回重复卡的方法,但是在尝试之前我需要先完成第一个方法。
答案 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
一张HashSet
和add
张卡,如果HashSet
,add
方法中已存在相同的卡片,则会返回{ {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 ...
}