我试图通过两个循环编写代码来查找ArrayList的唯一元素。 items是列表包含元素和重复项,uniqueitems包含每个元素的副本。 例如:
以下是代码:
uniqueitems.add(items.get(0));
for(int i=0;i<items.size();i++)
{
count=0;
for(int j=0;j<uniqueitems.size();j++)
{
if(items.get(i).equals(uniqueitems.get(j)))
{
count++;
break;
}
}
if(count==0)
{
n++;
uniqueitems.add(items.get(n));
}
}
我正在试图找出我的错误。
答案 0 :(得分:2)
下面:
uniqueitems.add(items.get(n));
如果找不到items.get(i)
,那么您应该在uniqueitems
中添加该元素:
uniqueitems.add(items.get(i));
不要使用n
变量。
另外,请检查您的equals
方法是否按预期工作。
而且,如果这不是家庭作业而您的课程已经覆盖了equals
和hashCode
方法,那么您可以使用这种单行方法:
List<YourClass> uniqueItems = new ArrayList<>(new LinkedHashSet<>(items));
答案 1 :(得分:1)
更简单的解决方案:
uniqueitems.add(items.get(0));
for(int i=1;i<items.size();i++){
if(!uniqueitems.contains(items.get(i))){
uniqueitems.add(items.get(i));
}
}
如果o在列表中
,则list.contains(Object o)返回trueGoogle是程序员的朋友,尽量不要重写已经存在的方法。
答案 2 :(得分:1)
不是编写自己的代码,而是使用 set 数据结构,这是一个更简单,更强大的解决方案。根据定义,一个集合只能包含唯一的元素,即没有重复的元素。
Java有几个Set接口的实现。我建议使用java.util.HashSet。实质上,您从ArrayList实例化HashSet(它会自动丢弃重复项),然后从刚刚创建的集合中提取另一个ArrayList。该数组将仅包含原始数组的唯一元素。