java 数组中的去重算法分析

下面是我写的一个关于数组去重的问题,nodup()方法,当然还有其他的一些数组的操作方法,这个去重的基本思路是:从第一项开始,遍历之后的项,如果遇到和第一项相同的项,就从这个重复项开始,其后的每一项向前移动一个位置。这就有一个问题,就是如果重复项太多,那么移动的次数就太多,效率就会降低。如果大家有好的方法,欢迎讨论。

class HighArray{
        private int [] a;
        private int num;

        public HighArray(int size){
                a = new int [size];
                num = 0;
        }
        //------------------------------------
        public void find(int key){
                int i ;
                for(i = 0 ; i < num ; i++)
                        if(a[i] == key)
                                break;
                if(i == num)
                        System.out.println("can't find " + key);
                else
                        System.out.println("find " + key);
        }
        //-----------------------------------
        public void insert(int value){
                a[num] = value;
                num++;
        }
        public void delMax(){
                int max;
                int i;
                max = a[0];
                for(i = 1 ; i < num ; i++)
                        if(a[i] > max)
                                max = a[i];
                System.out.println("max " + max);
                for(i=0; i < num ; i++)
                        if(a[i] == max)
                                break;
                        for(int j = i ; j < num ; j++)
                                a[j] = a[j+1];
                        num--;
  }
        //-----------------------------------
        public void noDup(){
                int i;
                int j=0;
                for(i = 0 ; i < num ; i++)
                        for(j = i + 1 ; j < num ; j++)
                                if(a[j] == a[i]){
                                        for(int k = j ; k < num ; k++)
                                                {a[k] = a[k+1];}
                                        num--;
                                }
        }
        //-----------------------------------
        public void  delete(int value){
                int i;
                for(i = 0 ; i < num ; i++)
                        if(a[i] == value)
                if(i != num){
                        for(int j = i ; j < num ; j++)
                                a[j] = a[j+1];
                        num--;
                }
                else
                        break;
        }
        //---------------------------------
        public void display(){
                for(int i = 0 ; i < num ; i++)
                        System.out.print(a[i] + " ");
                System.out.print("\n");
}
public  class HighArrayApp{
        public static void main (String [] args){
                HighArray ha = new HighArray(100);

                for(int i = 0 ; i < 80 ; i++){
int n = (int) (java.lang.Math.random()*79);
ha.insert(n);
}
                ha.display();

        //      ha.delMax();            

        //      ha.find(26);

        //      ha.delete(100);

                ha.noDup();

                ha.display();
        }
}


你可能感兴趣的:(java 数组中的去重算法分析)