我有一个数组,它看起来像这样:
array = { Person1, Person2, Person3, Person1, Person2, Person3};
现在,我如何获得具有唯一Persons总数的int?这意味着一个已经被计算在内的人不应该再被计算在内。
在上面的示例中,应该返回3 的int值
int uniq = 3;
我该如何完成这项任务?
如果你只想要尺寸,这是其他答案之一的正确版本:
Set<Person> set = new HashSet<Person>(Arrays.asList(array));
int count = set.size();
这假设您的Person
类型有一个equals
方法,该方法将告诉您两个人是否相同,或者如果没有equals
,则默认的equals
是OK(如果引用相等,则默认返回true
)。
附言:如果您在equals
中定义了自己的Person
,则必须也定义hashCode
,否则此解决方案将不起作用。必须定义hashCode
,以便如果两个Person
相等,则它们也具有相同的哈希码。请参阅在Java中重写equals和hashCode时应考虑哪些问题?。
在数组中添加人员时,最简单的方法是避免doublon。要做到这一点,当你在数组中添加一个人时,你要遍历所有数组,并验证你是否还没有:)
如果你需要在列表中有doublon,那么你应该创建一个tempArray,并像其他方法中描述的那样,只在这个新数组中添加不同的人,所以最后你会在tempArray.size()中有你的好数字
尝试:
List<Person> uniqueList = new ArrayList<Person>(new LinkedHashSet<Person>( array.asList() ).sort() );
uniqueList.size(); //Number of unique objects