繁体   English   中英

Java中n大小的数组

[英]Array of n size in Java

在我的采访中有人问:

从数组中打印重复值。

我将所有重复的值存储在数组b中。 最后将它们存储在哈希集中并打印哈希集。 我将它们存储在哈希集中的唯一原因是因为我只希望重复项具有唯一性值。 就像我的数组中有{1,2,2,1}一样,它应该只打印{1,2}。

下面的程序工作正常,但是我为数组b分配了固定的大小(下面的程序中size = 100),我希望在运行时其值应使用找到的重复项数目进行更新。 例如:如果我在数组a中有10个重复值,那么b然后b应该变成10。

在发布此问题之前,我进行了很多检查,我也认为可以使用ArrayList完成此操作,但是我不确定如何为数组b编写。

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

public class duplicate_values_hash {

    public static void main(String aa[])
    {   
        Integer a[] = {1, 2, 3, 1, 2, 4, 5, 1, 3, 8, 10, 11, 90, 8,12, 5, 4, 5, 8};
        Arrays.sort(a);

        Integer b[] = new Integer[100]; // How to update on runtime

        int len,i,j = 0;
        len = a.length;

        for(i = 1; i < len; i++)
        {
            if(a[i-1] == a[i])
            {   
                j = j + 1;  
                b[j] = a[i];
            }
        }

        List<Integer> list = Arrays.asList(b);
        HashSet hs = new HashSet();
        hs.addAll(list);
        System.out.println(hs);

    }
}

动态由阵列 尺寸分配:

public static void main(String aa[]) {
    Integer a[] = {
        1, 2, 3, 1, 2, 4, 5, 1, 3, 8, 10, 11, 90, 8, 12, 5, 4, 5, 8
    };
    Arrays.sort(a);

    Integer b[] = new Integer[a.length]; // How to update on runtime

    int len, i, j = 0;
    len = a.length;

    for (i = 1; i < len; i++) {
        if (a[i - 1] == a[i]) {
            b[j++] = a[i];
        }
    }

    List<Integer> list = new ArrayList<Integer>(Arrays.asList(b));
    list.removeAll(Collections.singleton(null));
    HashSet hs = new HashSet();
    hs.addAll(list);
    System.out.println(hs);

}

我认为这段代码做同样的事情

public static void main(String aa[])
{   
    Integer a[] = {1, 2, 3, 1, 2, 4, 5, 1, 3, 8, 10, 11, 90, 8,12, 5, 4, 5, 8};

    int len = a.length;
    HashSet hs = new HashSet();
    for(int i = 0; i < len; i++)
    {
        hs.add(a[i]);
    }

    System.out.println(hs);

}

这个问题到底是什么? 动态调整数组大小? 别。 或使用ArrayList,因为它将调整大小。

是否要查找数组中有多少重复项?

Set<Integer> set = new HashSet<>();
for(int nextInt:myArrayOfPossibleDuplicates) {
    set.add(nextInt);
}
for(int nextInt:set) {
    System.out.println(nextInt);
}
System.out.println("There were " + myArrayOfPossibleDuplicates.length - set.size() + " additional items through duplication");

还是您正在尝试处理每个项目有多少重复项? 使用地图执行此操作。

Map<Integer, Integer> howManyOfEach = new HashMap<>();
for(int nextInt:myArrayOfPossibleDuplicates) {
    if (!howManyOfEach.containsKey(nextInt)) {
       howManyOfEach.put(nextInt, 1);
    } else {
       howManyOfEach.put(nextInt, howManyOfEach.get(nextInt) + 1);
    }
}
for(Entry<Integer,Integer> item:howManyOfEach.entrySet()) { 
    System.out.println("Number " + item.key() + " -> " + item.value() + " time(s)");
}

现在您的采访结束了,似乎似乎毫无意义。

 for(i = 1; i < len; i++) { if(a[i-1] == a[i]) { j = j + 1; b[j] = a[i]; } } 

可以执行类似的操作,并且在给出适当的逻辑的情况下也可以正常工作,但是如果我正在寻找合适的Java程序员(而不是研究生程序员),这将是减分,因为这无法理解Java。

要查找重复的条目,我希望有更多类似这样的东西:

int nums[] = {1, 2, 3, 1, 2, 4, 5, 1, 3, 8, 10, 11, 90, 8,12, 5, 4, 5, 8};

Set<Integer> uniqueNums = new HashSet<>();
for (int num : nums) {
    if (!uniqueNums.add(num)) {
        System.out.println(num);
    }
}

如何运作

Set<E>是仅存储唯一元素的数据结构。 这样,如果您尝试添加集合中已经存在的值,则Set.add(E)将返回false

上面的循环遍历数字,然后尝试将每个数字添加到集合中。 uniqueNums.add(num)返回false任何数字都是集合中已经存在的数字,因此是重复的。

结果输出

上面的代码显示了这一点。

1
2
1
3
8
5
4
5
8

158被印刷两次,因为它们被复制两次 (即每个人总共有三个。)

现在,如果您不想看到重复的副本怎么办? 答案:使用另一个Set<E>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM