我有一个看起来像这样的数组:
array = { Person1, Person2, Person3, Person1, Person2, Person3};
现在我如何获得一个具有唯一人数总数的int?这意味着已经计算过的人不应再次计算。
在上面的给出示例中,应该返回int值3
int uniq = 3;
我该怎么做这个任务?
答案 0 :(得分:0)
最简单的方法是在数组中添加人员时避免加倍。 为此,当您在数组中添加Person时,您将遍历所有数组并验证您还没有它:)
如果你需要在列表中加倍,那么你应该创建一个tempArray并且只在这个新数组中添加不同的人,就像在另一个方法中描述的那样,所以最后你将在tempArray中得到你的好数字.size()
答案 1 :(得分:0)
尝试:
List<Person> uniqueList = new ArrayList<Person>(new LinkedHashSet<Person>( array.asList() ).sort() );
uniqueList.size(); //Number of unique objects
答案 2 :(得分:0)
如果你想要的只是大小,这是其他答案之一的正确版本:
Set<Person> set = new HashSet<Person>(Arrays.asList(array));
int count = set.size();
这假定您的Person
类型具有equals
方法,该方法将告诉您两个人是否相同,或者是否有equals
,默认{ {1}}正常(如果引用相等,则默认返回equals
。)
PS:如果您在true
中定义了自己的Person
,必须也定义equals
或否则这个解决方案不会起作用。必须定义hashCode
,以便如果两个hashCode
相等,那么它们也具有相同的哈希码。请参阅What issues should be considered when overriding equals and hashCode in Java?。