如何判断一个数组中的重复数据(考虑效率),如果有10000条数据,10万条,甚至更多

解决方案 »

  1.   

    用HashSet就可以了
    int[] array = new int[10000];
    array[0] = 1;
    // 填充数据Set set = new HashSet();
    for(int i = 0; i < array.length; ++i)
    {
        if(set.contains(array[i]))
            System.out.println(i + "重复了");
        else
            set.add(array[i]);
    }
      

  2.   

    将数组中数据转为HashSet中的数据,这样就能自动把重复数据过滤掉了,然后再用for each转回数组,如果不是很清楚给我留言,我具体解释
      

  3.   

       将数组中数据转为HashSet中的数据,HashSet不允许重复,会过滤掉重复数据,而且速度很快,效率很高,这是因为他的实现使用散列实现,而不是线性查询
        HashMap的解决方案就是用散列来实现键和值的存取。散列将键保存在某处,以便能够很快找到。而存储一组元素最快的数据结构是数组,所以用他来表示键的信息。数组并不保存键的值,而是保存键的信息,注意,这里是散列的关键。
       我们通过键对象生成一个数字,将其作为数组的下标,这个数就是散列码,由定义在Object中的、且可能由你的类覆盖的hashcode()方法生成。为了解决数组容量被固定的问题,不同的键可以产生相同的下标,也就是可以有冲突。因此,数组多大就不太重要了了,任何键总能在数组中找到他的位置。
       于是,查询一个值的过程首先就是计算散列码,然后使用散列码查询数组,这样我们就不是线性查询数组,而是快速的跳到数组的某个位置,只对少数元素进行比较。这就是HashMap会如此快的原因。
        详见http://blog.csdn.net/zfq642773391/archive/2010/04/16/5491862.aspx
      

  4.   

    不好意思,晕了 ,说HashSet的,怎么说成HashMap呢!?
    不过他们的原理都差不多,因为HashSet内部是使用HashMap实现的,对HashSet的查询,实际上是对HashMap的查询
    要存入HashSet的元素必须定义hashCode(),他对于HashSet中的散列实现是必须的
      

  5.   

    用set即可实现,set可以自动去重
      

  6.   

    用HashSet就可以了
    int[] array = new int[10000];
    array[0] = 1;
    // 填充数据Set set = new HashSet();
    for(int i = 0; i < array.length; ++i)
    {
      if(set.contains(array[i]))
      System.out.println(i + "重复了");
      else
      set.add(array[i]);
    }
      

  7.   

    写了一个简单的计算重复记录
    package com.samba;public class Test { /**
     * @param args
     */
    static String number = "ABCabcabcabc"; public static void main(String[] args) {
    // TODO Auto-generated method stub
    calc();
    } public static void calc() {
    String ch = "";
    for (int i = 0; i < number.length(); i++) {
    if (ch.indexOf(number.charAt(i)) > -1)
    continue;
    int count = 0;
    for (int j = i; j < number.length(); j++) {
    if (number.charAt(i) == number.charAt(j)) {
    count++;
    }
    }
    ch += number.charAt(i);
    System.out.println(number.charAt(i) + "重复的数:" + count);
    }
    }}A重复的数:1
    B重复的数:1
    C重复的数:1
    a重复的数:3
    b重复的数:3
    c重复的数:3
      

  8.   

    HashSet是可以排重,但不知道效率是不是最高的
      

  9.   

    用set吧,只要equals和hashCode相同在set中就只能存在一个