【问题标题】:How to keep only unique values in my array?如何在我的数组中只保留唯一值?
【发布时间】:2013-12-29 00:55:15
【问题描述】:

我有一个包含值的数组:

[1,2,2,8,8,10,10,10,11,]

我想要这样的数组:

[1,2,8,10,11]

如何删除所有条目以便只保留唯一值?

【问题讨论】:

标签: java arrays


【解决方案1】:

您的意思是条目应该是唯一的。

我恰好在几分钟前回答了一个非常相似的问题,所以这里是调整后的代码:

public class Main {
    public static void main(String[] args) {
        Integer[] arr = {1, 2, 2, 8, 8, 10, 10, 10, 11 };
        System.out.println(Arrays.toString(arr));

        Set<Integer> set = new HashSet<>(Arrays.asList(arr));
        arr = new Integer[set.size()];
        arr = set.toArray(arr);

        System.out.println(Arrays.toString(arr));
    }
}

输出

[1, 2, 2, 8, 8, 10, 10, 10, 11]
[1, 2, 8, 10, 11]

再说一次:如果您使用非常大的集合,代码可能会效率低下,因为它会将您的数据扔到几个集合中。

HashSet 会自动删除重复项,因此您只需将值插入该集合即可。

【讨论】:

  • 几乎...使用LinkedHashSet 来维护迭代顺序,否则新数组将基本上是随机顺序
  • @Bohemian:我也是这么想的,但是在执行 20 次之后,结果总是如图所示。即使您混合原始数组中的值,它们也会从低到高显示。 - 编辑:哦,好吧,迭代顺序。 HashSet 必须从低到高排序,LinkedHashSet 确实保持原来的顺序。
【解决方案2】:

如果你想要唯一的值,你不想要一个数组,你想要一个Set

Set<Integer> numbers = new LinkedHashSet<Integer>();    

SetLinkedHashSet 实现保持迭代顺序与插入相同 顺序。

【讨论】:

    【解决方案3】:

    在 php 中很容易实现,使用函数:array_unique() http://www.php.net/manual/en/function.array-unique.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多