Как организовать массив без повторов

Рейтинг: 0Ответов: 2Опубликовано: 22.10.2014

Дан массив А (числовой). Построить массив, содержащий по одному экземпляру элементов массива. Подскажите, пожалуйста, я в этом деле совсем новичок, что не так.)) На Java.

public static void main(String[] args)
{  
        int x[] = {2, 2, 5, 1,  4, 7} ;
        int sum = 0;
        int k=0;
        int z[]= new int [x.length- sum];
        {for(int i=0; i<=x.length; i++)
            if(x[i]==0)
                k=k+1;
            else
            {}
        }
        {
            for(int i=0; i<=x.length; i++)
                {
                for(int j=i+1; j<=x.length; j++)
                if(x[i]==x[j+1])
                    {x[i]=0;
                sum=sum+1;}
                else
                {}
    }
        }
        {if(sum==0)
            {for(int i=0; i<x.length; i++)
                z[i]=x[i];
            }
        else
            {for(int j=0; j<x.length; j++)
        {
        if(x[j]==0)
        {}
        else
        z[j]=x[j];}
        }
        }
        {if(sum==k)
    {for(int i=0; i<z.length; i++)
    System.out.println(z[i]+ " ");
    }
        else
        {for(int i=0; i<z.length; i++)
            System.out.println(z[i]+ " " + 0);
            }
        }
    }
}

Ответы

▲ 1Принят

Ну, если бы мне было лень много писать и мало беспокоило, насколько быстро это работает, то я написал бы что-то около этого:

Integer[] a = {2, 4, 7, 4, 9, 0};
HashSet<Integer> tmp = new HashSet<Integer>(Arrays.asList(a));
Integer[] b = new Integer[tmp.size()];
b = (Integer[]) tmp.toArray(b);
System.out.println(Arrays.toString(b));
▲ 1

@liliya, если без сортировки и совсем тупо (сдвиг), то обнаружив, что i-й элемент уже встречается, надо все оставшиеся переписать на одну позицию "левее" и уменьшить размер массива на 1.

Естественно, в Java уменьшить настоящий размер (x.length()) не получится. Просто запомните его (в самом начале) в какой-нибудь переменной (ubound), которую и будете уменьшать, и делайте циклы до нее.

Небольшая оптимизация -- это не сразу переписывать весь хвост, а корректировать величину шага (она будет увеличиваться на 1 при каждом новом повторяющемся элементе) и переписывать "остаток" на величину шага.