我的代码出错:找到一个arraylist的独特元素

时间:2015-04-16 17:54:11

标签: java arraylist

我试图通过两个循环编写代码来查找ArrayList的唯一元素。 items是列表包含元素和重复项,uniqueitems包含每个元素的副本。 例如:

  • 项目:面包,奶酪,牛奶,面包,薯条,茶,奶酪,面包
  • 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));

    }
}

我正在试图找出我的错误。

3 个答案:

答案 0 :(得分:2)

下面:

uniqueitems.add(items.get(n));

如果找不到items.get(i),那么您应该在uniqueitems中添加该元素:

uniqueitems.add(items.get(i));

不要使用n变量。

另外,请检查您的equals方法是否按预期工作。

而且,如果这不是家庭作业而您的课程已经覆盖了equalshashCode方法,那么您可以使用这种单行方法:

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)返回true

Google是程序员的朋友,尽量不要重写已经存在的方法。

答案 2 :(得分:1)

不是编写自己的代码,而是使用 set 数据结构,这是一个更简单,更强大的解决方案。根据定义,一个集合只能包含唯一的元素,即没有重复的元素。

Java有几个Set接口的实现。我建议使用java.util.HashSet。实质上,您从ArrayList实例化HashSet(它会自动丢弃重复项),然后从刚刚创建的集合中提取另一个ArrayList。该数组将仅包含原始数组的唯一元素。