-3

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

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

4

6 回答 6

3

如果您不想在列表中出现重复条目​​,请使用 SET:

  1. HashSet如果你不需要序列
  2. LinkedHashSet如果您需要按顺序打印名称

注意:您必须覆盖对象(ID,名称)中的等于和哈希码,否则您将在 SET 中找到重复的对象

于 2012-12-18T07:32:55.347 回答
0

您可以在SetList系列的帮助下完成

我们已经了解了如何使用Set系列删除重复项。我们也可以在List家族的帮助下做到这一点。请参考下面的代码。

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;

    }

}
于 2012-12-18T09:53:30.933 回答
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;
}
于 2012-12-18T07:25:38.420 回答
0

改用 a 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
于 2012-12-18T07:27:08.247 回答
0

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

于 2012-12-18T07:29:21.033 回答
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 排序的,那么它是相当随机的,保留哪些条目,删除哪些条目。

于 2012-12-18T07:32:33.443 回答