避免在ArrayList中打印重复项

时间:2012-12-18 07:19:25

标签: java arraylist

我有一个包含对象(id,name)的数组列表。如果列表中有重复的名称,则需要删除

如果重复,我只需要打印一次名称

6 个答案:

答案 0 :(得分:3)

如果您不希望列表中有重复条目,请使用SET:

  1. HashSet ,如果您不需要序列
  2. LinkedHashSet 如果您需要按顺序打印名称
  3. 注意:您必须覆盖对象(ID,Name)中的equals和hashcode,否则您将在SET中找到重复的对象

答案 1 :(得分:0)

public static boolean checkDuplicate(ArrayList list) {
 HashSet set = new HashSet();
 for (int i = 0; i < list.size(); i++) {
  boolean val = set.add(list.get(i));
  if (val == false) {
    return val;
  }
 }
 return true;
}

答案 2 :(得分:0)

请改用java.util.Set。它不能包含重复项。

参考:http://docs.oracle.com/javase/6/docs/api/java/util/Set.html

Set<String> myNames = new HashSet<String>();
myNames.add("JAMES");
myNames.add("ELLA");
myNames.add("JAMES");

myNames.size() // will return 2

答案 3 :(得分:0)

使用Set数据结构实现适当的Comparator。运行循环并将对象放入该集合中。打印此套装。

答案 4 :(得分:0)

Arraylist提供了一个迭代器,允许从列表本身中删除迭代器返回的最后一个元素。所以我们只是跟踪我们已经看过的名字。 Set实施很有帮助。

Set<String> names = new HashSet<>();
Iterator<MyType> it = getListFromSomewhere().iterator();  // you know how
while(it.hasNext()) {
   if (!names.add(it.next().getName()) {
     it.remove();
   }
}

提示:如果值已经在集合中,则添加到集合将返回false。

说明

您的要求不是那么明确:此处我们将第一个条目保留为名称,并从列表中删除所有以下条目。如果列表没有按id排序,那么它是相当随机的,保留了哪些条目被删除。

答案 5 :(得分:0)

您可以在设置以及列表系列

的帮助下完成此操作

我们已经了解了如何使用设置系列删除重复项。我们也可以在列表系列的帮助下完成。请参考以下代码。

package com.rais.util;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Rais.Alam
 * @project Utils
 * @date Dec 18, 2012
 */
public class ConverterUtil
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {

        List<String> original = new ArrayList<String>();

        original.add("Tomcat");
        original.add("Jboss");
        original.add("GlassFish");
        original.add("Weblogic");
        original.add("Tomcat");

        List<String> newList = removeDuplicates(original);

        for (String value : newList)
        {
            System.out.println(value);
        }

    }

    public static List<String> removeDuplicates(List<String> original)
    {

        List<String> tempList = new ArrayList<String>();

        for (String value : original)
        {
            if (!tempList.contains(value))
            {
                tempList.add(value);
            }
        }

        return tempList;

    }

}