循环遍历数组并只显示一项



我有一个数组,它看起来像这样:

  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

最新更新