Java 检查数组中同一对象的多个实例
我正在寻找一种方法来检查数组是否包含同一对象的多个实例。我一直在四处寻找,但在javadoc和stackoverflow中似乎找不到任何东西 我正在创建一个垄断棋盘游戏(或者用丹麦语,斗牛士),根据玩家拥有的场地数量,登陆其中一个场地的费用会有所不同 我在我的玩家类中有一个列表,其中我列出了玩家购买的所有字段:Java 检查数组中同一对象的多个实例,java,arrays,list,object,duplicates,Java,Arrays,List,Object,Duplicates,我正在寻找一种方法来检查数组是否包含同一对象的多个实例。我一直在四处寻找,但在javadoc和stackoverflow中似乎找不到任何东西 我正在创建一个垄断棋盘游戏(或者用丹麦语,斗牛士),根据玩家拥有的场地数量,登陆其中一个场地的费用会有所不同 我在我的玩家类中有一个列表,其中我列出了玩家购买的所有字段: public List<OwnableField> ownsList = new ArrayList<>(); public void buy(O
public List<OwnableField> ownsList = new ArrayList<>();
public void buy(OwnableField ownable) {
pay(ownable.getPrice());
ownsList.add(ownable);
}
如果定义了正确的等于和哈希代码,那么可以使用集合来实现这一点
List list = ...
if(new HashSet(list).size().equals(list.size()){
//same size
} else {
//there was a duplicated element
}
如果只想检查一个特定对象,则可以使用:
final Object someObject = ...
List list = ...
int size = FluentIterable.from(list).filter(new Predicate<Object>() {
@Override
public boolean apply(Object input) {
return input == someObject;
}
}).size();
if(size > 1) {
//there is a duplicated element
}
如果定义了正确的等于和哈希代码,那么可以使用集合来实现这一点
List list = ...
if(new HashSet(list).size().equals(list.size()){
//same size
} else {
//there was a duplicated element
}
如果只想检查一个特定对象,则可以使用:
final Object someObject = ...
List list = ...
int size = FluentIterable.from(list).filter(new Predicate<Object>() {
@Override
public boolean apply(Object input) {
return input == someObject;
}
}).size();
if(size > 1) {
//there is a duplicated element
}
假设您只想检查一个对象的多个实例,对吗
for(OwnableField o:ownsList)if(o MyObject的instanceof)计数器+++
但实际上,mate。您应该找到另一种替代redier
的方法。。他们很烂。没有人想买。是的,我只想检查一件物品是正确的,谢谢!而且这是学校的作业,所以我真的没有选择的余地。这些领域实际上是啤酒厂领域,而不是再干燥器领域——而且啤酒厂领域更糟糕:)我不确定我确切地了解它是如何工作的,以及如何实施它。按照我的理解,第一个:(OwnableField o:ownsList)将扩展类OwnableField并位于ownsList数组中的所有对象存储到一个名为o的变量中?然后检查刚才存储在o中的任何对象是否是我们正在查找的对象的实例,然后为每个对象添加1到计数器中,每个对象都是myObject的实例?您正在运行一个循环。您告诉函数体if(MyObject的o instanceof)计数器+++
的运行次数与ownsList
集合中的OwnableField
的运行次数相同。因此,您不必检查存储在o
中的“any”对象是否是MyObject的实例;您多次检查存储在o
中的对象是否为-。我假设您只想检查一个对象的多个实例是否正确for(OwnableField o:ownsList)if(o MyObject的instanceof)计数器+++
但实际上,mate。您应该找到另一种替代redier
的方法。。他们很烂。没有人想买。是的,我只想检查一件物品是正确的,谢谢!而且这是学校的作业,所以我真的没有选择的余地。这些领域实际上是啤酒厂领域,而不是再干燥器领域——而且啤酒厂领域更糟糕:)我不确定我确切地了解它是如何工作的,以及如何实施它。按照我的理解,第一个:(OwnableField o:ownsList)将扩展类OwnableField并位于ownsList数组中的所有对象存储到一个名为o的变量中?然后检查刚才存储在o中的任何对象是否是我们正在查找的对象的实例,然后为每个对象添加1到计数器中,每个对象都是myObject的实例?您正在运行一个循环。您告诉函数体if(MyObject的o instanceof)计数器+++
的运行次数与ownsList
集合中的OwnableField
的运行次数相同。因此,您不必检查存储在o
中的“any”对象是否是MyObject的实例;检查存储在o
中的对象是否为-多次。