使用java在数组中找到重复数字

时间:2016-05-29 09:03:43

标签: java numbers duplicates

我尝试在数组中找到重复的数字,但我有一个问题 如果数组中的数字重复超过2个数字,它将像这样打印

重复号码是:40

重复号码是:40

不正确。 所以,我只想打印重复的数字和它们出现的数量。 这是我的代码。

public static void main(String[] args)
{

    Scanner sc = new Scanner(System.in);

    int[] x = {
        10, 20, 30, 40, 40, 40, 25
    };

    int count = 0;

    for (int i = 1; i < x.length; i++) {
        if (x[i - 1] == x[i]) {
            System.out.println("Dupicate number is :" + x[i]);
            count++;
        }
    }

    System.out.println(count);

}

3 个答案:

答案 0 :(得分:1)

将数组成员放在一个保持计数的hashmap中。 然后迭代地图。所以你也发现了所有的副本。

public static void main(String[] args)

{

    int[] x = { 10, 20, 30, 40, 40, 40, 25 };
    Map<Integer, Integer> count = new HashMap<>();
    for (int i = 1; i < x.length; i++) {
//      if (count.containsKey(x[i]) && (x[i] == x[i-1])  ) { 
//      use this if the duplicates must be consecutive
        if (count.containsKey(x[i])) {
            count.put(x[i], count.get(x[i]) + 1);
        } else {
            count.put(x[i], 1);
        }
    }
    for (Entry<Integer, Integer> entry : count.entrySet()) {
        if (entry.getValue() > 1) {
            System.out.println("Dupicate number is :" + entry.getKey() + " " + entry.getValue() + " occurences");
        }
    }
}

修改 在评论中添加了对连续重复的修改,但这只找到了最后一个重复的

答案 1 :(得分:0)

从Java Util使用${initParam['myconstantkey']}

HashSet

现在newArr只包含非重复元素。

没有。重复项= // x is name of your array int[] x = { 3, 4, 4, 5, 6 }; HashSet < Integer > mySet = new HashSet < Integer > (); ArrayList < Integer > dlist = new ArrayList < Integer > (); for (int val: x) { if (!mySet.add(val)) { dlist.add(val); } } for (int i = 0; i < dlist.size(); i++) { System.out.println(dlist.get(i)); }

答案 2 :(得分:-1)

一个实用的解决方案是使用集合: 将数组转换为列表, 方法Collections.frequency(a, b)将返回集合a中b的存在方式,因此您需要迭代列表,然后使用该方法的结果填充地图

实施例

public static void main(String[] args) {
    int[] x = { 10, 20, 30, 40, 40, 40, 25 };
    List<Integer> myInts = new ArrayList<Integer>();

    for (int index = 0; index < x.length; index++) {
        myInts.add(x[index]);
    }
    Map<Integer, Integer> ss = new HashMap<Integer, Integer>();
    for (int index = 0; index < x.length; index++) {
        if (Collections.frequency(myInts, x[index]) > 1) {
            ss.put(x[index], Collections.frequency(myInts, x[index]));
        }
    }
    System.out.println(ss);
}

该代码将打印

  

{40 = 3}

这实际上就是你要找的东西。