如何在java中从set中找到重复的项目位置

时间:2016-08-08 07:11:55

标签: java data-structures

public class Practise {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<Integer>();

        int[] array = { 1, 1, 2, 3, 4, 5, 6, 7, 8, 8 };

        for (int i = 0; i < array.length; i++) {
            for (int j = 1; j < array.length; j++) {
                if (array[i] == array[j] && i != j) {
                    set.add(array[i]);
                }
            }
        }

        System.out.println(set);

    }
}

这是我的代码我能够找到重复的元素1和8,但我想它的位置也在设置这些项目在哪个位置请建议我如何实现它。我必须得到所有重复的项目第二位置我的意思是int [] array = {1,1,2,3,4,5,6,7,8,8};它应该显示1位于第一位置,8位于第9位

4 个答案:

答案 0 :(得分:1)

public class Practise {
    public static void main(String[] args) {   
        Map<Integer, Integer> result = new HashMap<Integer, Integer>();
        int[] array = { 1, 1, 2, 3, 4, 5, 6, 7, 8, 8 };
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                if (array[i] == array[j] && i != j) {
                    result.put(i, array[i]);
                }
            }
        }
        System.out.println(result);
    }
}

答案 1 :(得分:1)

如果您想知道副本的位置,那就很容易了。正如@Kagemusha已经提到的,add的方法Set如果添加了元素则返回true,如果元素已经存在于集合中则返回false。所以你唯一需要做的就是:

for (int i = 0; i < array.length; i++) {
     if(!set.add(array[i]) {
       //i is now the position of the duplicate
       duplicate_position = i;
    }
}

编辑:我看到@LiuJie也添加了正确答案。我仍然想为我的解决方案提供一个案例。在你的情况下有这么小的数组没有太大的区别,但他的答案的复杂性是O(n ^ 2)(我们真的想避免这种复杂性)我的解决方案只有O(n)(它确实需要额外的空间,但只有你不打算使用该集合)。

答案 2 :(得分:0)

System.Timers.Timer sysTimer = new System.Timers.Timer(TimeSpan.FromSeconds(5).TotalMilliseconds);
sysTimer.Elapsed += (s, e) =>TestMethod();
sysTimer.Enabled = true;

答案 3 :(得分:0)

我写了这个简单的逻辑,打印所有重复的数字及其位置

int[] arr = {0, 1, 2, 3, 4, 3, 5, 6, 4, 7, 8, 7, 8};

for(int i=0; i<arr.length;i++){
    for(int j=i+1; j<arr.length;j++){
        if(arr[i] == arr[j]){
            System.out.println("Number: "+arr[i]+" found repeating at position: "+i+" , repeated at position "+j);
        }
    }
}