【问题标题】:What is the best way to remove repeated elements from a array? [duplicate]从数组中删除重复元素的最佳方法是什么? [复制]
【发布时间】:2019-09-01 15:51:21
【问题描述】:

我接受一个手机号码数组,我需要删除数组中的重复号码。我选择的方式是将数组转换为哈希集,然后将其转换回数组。有没有更好的办法?

我的代码如下:

public static void main (String[] args) {

    String[] mobiles = new String[]{"1", "2", "3", "1", "1"};

    Set<String> data = new HashSet<>(Arrays.asList(mobiles));
    String[] result = data.toArray(new String[0]);

    for (String s : result) {
        System.out.println(s);
    }
}

【问题讨论】:

标签: java


【解决方案1】:

您也可以使用 Java8 Streams

public static void main(String []args){
        String[] mobiles = new String[]{"1", "2", "3", "1", "1"};
        String[] result= Arrays.stream(mobiles).distinct().toArray(String[]::new);
        for (String s : result) {
               System.out.println(s);
        }                             
}

【讨论】:

    【解决方案2】:

    最简单的方法是使用 LinkedHashSet。这样,顺序保持:

    String[] nonUnique = new String[] { "1", "2", "5", "2", "3", "1" };
    List<String> unique = new ArrayList<>(new LinkedHashSet<>(Arrays.asList(nonUnique)));
    

    一般来说,我建议使用集合而不是数组。

    【讨论】:

      【解决方案3】:

      我比较喜欢你目前的做法。在我的脑海中,您可以尝试通过首先对数组进行排序来删除重复项,然后沿着数组向下走:

      int[] mobiles = new int[] {1, 2, 3, 1, 1};
      Arrays.sort(mobiles);
      List<Integer> result = new ArrayList<>();
      
      int last = -1;
      for (int val : mobiles) {
          if (val != last || result.size() == 0) {
              result.add(val);
              last = val;
          }
      }
      
      mobiles = new int[result.size()];
      for (int i=0; i < result.size(); ++i) {
          mobiles[i] = result.get(i);
      }
      System.out.println(Arrays.toString(mobiles));
      
      [1, 2, 3]
      

      此答案假定您不想保留数组中的原始顺序。当然,“原始”顺序只有在您定义了要保留的副本后才有意义。

      上述方法的性能瓶颈取决于对数组进行排序的成本。假设这可以在O(n*lgn) 中完成,那么这将是整体性能。

      【讨论】:

        【解决方案4】:

        你也可以使用 hashmap 来解决这个问题。存储所有不同的元素。

        Hashmap<Integer,Integer> hm = new Hashmap<>();
        
            for(int i=0;i<arr.length;i++)
            {
                   hm.add(arr[i],1);
        
            }
        Now print the hashmap.
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-26
          • 2010-09-26
          • 2021-03-31
          相关资源
          最近更新 更多