Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 循环遍历数组并仅显示一项_Java_Android - Fatal编程技术网

Java 循环遍历数组并仅显示一项

Java 循环遍历数组并仅显示一项,java,android,Java,Android,我有一个如下所示的数组: array = { Person1, Person2, Person3, Person1, Person2, Person3}; 现在我怎样才能得到一个整数和唯一的人的总数?这意味着已经被计算过的人不应该再被计算 在上面的示例中,应该返回int值3 int uniq = 3; 如何执行此任务?最简单的方法是在数组中添加人物时避免doublon。 要做到这一点,当您在数组中添加一个人时,您需要遍历所有数组,并验证您还没有该人:) 如果您需要在列表中包含doub

我有一个如下所示的数组:

  array = { Person1, Person2, Person3, Person1, Person2, Person3};
现在我怎样才能得到一个整数和唯一的人的总数?这意味着已经被计算过的人不应该再被计算

在上面的示例中,应该返回int值3

  int uniq = 3;

如何执行此任务?

最简单的方法是在数组中添加人物时避免doublon。 要做到这一点,当您在数组中添加一个人时,您需要遍历所有数组,并验证您还没有该人:)

如果您需要在列表中包含doublon,那么您应该创建一个tempArray,并且只在这个新数组中添加不同的人,就像在另一个方法中所描述的那样,这样最终您就可以在tempArray.size()中找到合适的数字了。

请尝试:

List<Person> uniqueList = new ArrayList<Person>(new LinkedHashSet<Person>( array.asList() ).sort() );

uniqueList.size(); //Number of unique objects
List uniqueList=newarraylist(newlinkedhashset(array.asList()).sort());
uniqueList.size()//唯一对象数

如果您只需要尺寸,这是其他答案之一的正确版本:

Set<Person> set = new HashSet<Person>(Arrays.asList(array));
int count = set.size();
Set Set=newhashset(Arrays.asList(array));
int count=set.size();
这假设您的
Person
类型有一个
equals
方法,该方法将告诉您两个人是否相同,或者如果没有
equals
,则默认的
equals
正常(如果引用相等,则默认返回
true


注意:如果您已经在
equals
中定义了自己的
,则必须同时定义
hashCode
,否则此解决方案将无法工作<必须定义code>hashCode,以便如果两个
Person
s相等,则它们也具有相同的哈希代码。请参阅。

在我们回答之前,您如何知道“人”是平等的?它们是否是相同的引用(因此在上面的示例中,
array[0]==array[3]
为真)?或者您是否为您的
人员
类重新定义了
等于
?或者你在用其他方法来测试两个人是否相同?所有数字相同的人都有相同的值,或者只是使用一个集合。。每次检查一个对象是否已经在数组中都会很昂贵。我实际上不知道Brianjs的方法,但这比我的好^^^但事实上,他为什么必须在列表中有doublon^^我得到一个有名字的数组,但我只想说明有多少不同的名字,作为一个数字,我明白,但你有没有用他们的双重?或者这只是一种痛苦,在这种情况下,你应该避免从一开始就添加double:)至少我认为^(1)
LinkedHashSet
没有
排序方法;(2) 如果元素类型不可比较,您甚至无法进行排序,并且我们不知道元素类型是否定义了排序函数;(3) 如果他想要的只是大小,那么
sort
将毫无意义。(4)我第一次错过了这一点:数组没有
asList
方法。正确的调用是
Arrays.asList(array)