UniqueElement Counter Java

时间:2016-06-17 04:36:50

标签: java arrays

我刚刚开始了Java Data Structures夏季课程。分配的问题之一是不是计算数组中的所有元素,而是要找到每个唯一元素。

numUnique(new double[] { 11, 11, 11, 11, 22, 33, 44, 44, 44, 44, 44, 55, 55, 66, 77, 88, 88 })==8

numUnique(new double[] { 11, 22, 33, 44, 55, 66, 77, 88})==8

在上面的第一个例子中,列出了11次,22次,33次,44次,66次,77次,88次,88次。数组中有17个元素,但只有8个不同的数字。这两个例子给出了8的相同输出,这就是我应该找到的数字。

3 个答案:

答案 0 :(得分:4)

在没有任何中间集合的Java 8中,这是一个很好的简单方法:

List<Double> unique = Arrays.stream(array).distinct()
    .collect(Collectors.toList());

或者如果您只想要唯一元素的数量,请用count()替换收集器。

答案 1 :(得分:1)

执行此操作的两种简单方法是将数组添加到集合中(根据定义将删除重复项),或使用数字作为键将每个数字添加到散列映射。

使用集合:

double[] input = new double[] {11, 11, 11, 11, 22, 33, 44, 44, 44, 44, 44, 55, 55, 66, 77, 88, 88};
Set<Double> set = new HashSet<Double>(Arrays.asList(input));
System.out.println("There were " + set.size() + " unique numbers in the set.");

使用地图:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i=0; i < double.length; ++i) {
    map.put(i, null);
}
System.out.println("There were " + map.keySet.size() + " unique numbers in the set.");

答案 2 :(得分:0)

在Java中跟踪唯一项的最简单方法之一是使用HashMap实现。

您需要的API是:containsKey()和put()。已阅读下面的API文档。 https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

示例实施:

import java.util.HashMap;
import java.util.Map;

public class test {
    public static void main(String[] args) {
        double[] value1 = new double[] { 11, 11, 11, 11, 22, 33, 44, 44, 44, 44, 44, 55, 55, 66, 77, 88, 88 };
        Map<Double, Integer> numberTracker = new HashMap<>();

        for(Double value : value1) {
            if (!numberTracker.containsKey(value)) {
                numberTracker.put(value, /*dummy value=*/1);
            }
        }

        for (Map.Entry<Double,Integer> entry : numberTracker.entrySet()) {
            System.out.println(entry.getKey());
        }
    }
}

注意:因为你有一个双数组,所以输出将是双数据类型。也就是说,它会是这样的; [33.0,66.0,77.0,11.0 ......]

您可以通过将数组更改为Integer类型或找到将double值转换为整数的方法来解决double类型问题。

因为这应该是一个作业问题,我会留给你最后一点。