【问题标题】:Remove duplicates from an ArrayList?从 ArrayList 中删除重复项?
【发布时间】:2013-07-13 05:46:10
【问题描述】:

如何从ArrayList 中删除重复项?

我有getCcnptags 数组作为[java,php,c++,c,java,php],这是我从bean 数组中获取的,并且我为每个数组变量提供了超链接,但我想在添加超链接之前删除重复项,是否可以添加我下面的代码中的任何代码都可以删除重复项。

for(int k=0;k<name.getCcnptags().size();k++)
    {

    String tag=name.getCcnptags().get(k);
        if(k!=name.getCcnptags().size()-1)
    {
    tag=tag+",";

    }
    %>
    <a href='#'><%=tag%></a>
}

【问题讨论】:

标签: java arrays unique


【解决方案1】:

最好使用HashSet。如果不可能,那么您可以为此使用临时的HashSet

ArrayList a= new ArrayList();
HashSet hs = new HashSet();
hs.addAll(a);  // willl not add the duplicate values
a.clear();
a.addAll(hs);  // copy the unique values again to arraylist

【讨论】:

    【解决方案2】:

    使用Set interace,一个不包含重复元素的集合。

    ArrayList 创建Hashset 并使用它。

    Collection 对象有一个构造函数,它接受 Collection 对象来初始化值。

    ArrayList yourlist= new ArrayList();
    HashSet nodupesSet= new HashSet(yourlist);
    

    现在迭代nodupesSet

    【讨论】:

      【解决方案3】:

      我在网上找到了这个。它与删除 Vector 中的元素非常相似,只是方法名称有所不同。

      import java.util.*;
      class RemoveDuplicates
      {
      
          public static void main(String args[])
          {
          ArrayList<String> v=new ArrayList<String>();
          v.add("Gowtham");
          v.add(" Gutha's");
          v.add(" Java");
          v.add("-");
          v.add("demos");
          v.add(".");
          v.add("blogspot");
      
          // '.' again!
          v.add(".");
          v.add("com ");
      
          // Gowtham again!
          v.add("gowtham");
      
          System.out.println("Original");
      
              for(int i=0;i<v.size();i++)
              {
                  System.out.print(v.get(i));
      
              }
      
          System.out.println("\nAfter removing 
      
      duplicates");
          removeDuplicates(v);
      
              for(int i=0;i<v.size();i++)
              {
                  System.out.print(v.get(i));
              }
      
          }
      
      
          // Applicable for all types of ArrayLists
      
          public static void removeDuplicates(ArrayList 
      
      v)
          {
              for(int i=0;i<v.size();i++)
              {
                  for(int j=0;j<v.size();j++)
                  {
                          if(i!=j)
                          {
      
      
      if(v.get(i).equals(v.get(j)))
                              {
                              v.remove(j);
                              }
                          }
                  }
              }
          }
      
      
          /*
              * Specifically applicable for String is 
      
      written for equalIgnoreCase
              * The code..
      
      
              public static void 
      
      removeDuplicates(ArrayList<String> v)
              {
                  for(int i=0;i<v.size();i++)
                  {
                      for(int j=0;j<v.size();j++)
                      {
                          if(i!=j)
                          {
      
      
      if(v.get(i).equalsIgnoreCase(v.get(j)))
                              {
                              v.remove(j);
                              }
                          }
                  }
              }
          */
      
      }
      

      【讨论】:

      • 不错!!但是使用现有的有用选项比再次实现更好:),仍然值得。
      • 嗯。是的!使用现有的写我们自己会很棒很聪明!你说什么?
      • 你说得对 :) 我们会感觉很好,但代码会像任何东西一样增加,如果你开始自己实现一切:)
      • 这就是为什么我说使用现有的很聪明! ;)
      【解决方案4】:

      附带说明,如果您需要列表中的项目保持其原始顺序,请改用以下方法。该集合用于检查重复项,并返回另一个列表。

      public list<Object> removeDuplicates(List<Object> list)
      {
          List<Object> secondary = new LinkedList<Object>();
          Set<Object> auxillery  = new HashSet<Object>();
      
          for (Object o : list)
          {
              if (!auxillery.contains(o))
              {
                  auxillery.add(o);
                  secondary.add(o);
              }
          }
      
          return secondary;
      }
      

      用法是这样的(或类似的):

      public static final void main(String[] args)
      {
          List<Integer> numbers = new LinkedList<Integer>();
          numbers.add(5); numbers.add(6); numbers.add(5); numbers.add(8);
      
          numbers = removeDuplicates(numbers);
      }
      

      需要记住的一点:如果使用自定义类,请确保它们覆盖标准的Object.hashCode() 方法。否则,这种方法将无法正常工作。

      【讨论】:

        猜你喜欢
        • 2018-05-29
        • 2015-12-12
        • 2017-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 2021-12-24
        相关资源
        最近更新 更多