Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用Set的情况下有效地从阵列中删除重复项_Java_Arrays_Optimization - Fatal编程技术网

Java 如何在不使用Set的情况下有效地从阵列中删除重复项

Java 如何在不使用Set的情况下有效地从阵列中删除重复项,java,arrays,optimization,Java,Arrays,Optimization,我被要求编写自己的实现来删除数组中的重复值。这是我创造的。但在使用1000000个元素进行测试后,需要很长时间才能完成。我能做些什么来改进我的算法或消除任何bug吗 我需要编写自己的实现,而不是、HashSet等或任何其他工具,如迭代器。只需一个数组即可删除重复项。 public static int[] removeDuplicates(int[] arr) { int end = arr.length; for (int i = 0; i < end; i++) {

我被要求编写自己的实现来删除数组中的重复值。这是我创造的。但在使用1000000个元素进行测试后,需要很长时间才能完成。我能做些什么来改进我的算法或消除任何bug吗

我需要编写自己的实现,而不是、
HashSet
等或任何其他工具,如迭代器。只需一个数组即可删除重复项。

public static int[] removeDuplicates(int[] arr) {

    int end = arr.length;

    for (int i = 0; i < end; i++) {
        for (int j = i + 1; j < end; j++) {
            if (arr[i] == arr[j]) {                  
                int shiftLeft = j;
                for (int k = j+1; k < end; k++, shiftLeft++) {
                    arr[shiftLeft] = arr[k];
                }
                end--;
                j--;
            }
        }
    }

    int[] whitelist = new int[end];
    for(int i = 0; i < end; i++){
        whitelist[i] = arr[i];
    }
    return whitelist;
}
public static int[]移除的副本(int[]arr){
int end=阵列长度;
for(int i=0;i
公共静态int[]移除副本(int[]arr){
HashSet=newhashset();
最终整数长度=阵列长度;
//改为len
对于(int i=0;i

以O(N)时间而不是O(N^3)时间运行

您可以借助Set集合

int end = arr.length;
Set<Integer> set = new HashSet<Integer>();

for(int i = 0; i < end; i++){
  set.add(arr[i]);
}

您需要对数组进行排序,然后循环并删除重复项。因为您不能使用其他工具,所以需要自己编写代码

您可以很容易地在Java中找到快速排序的示例(本示例基于此示例)

编辑

数组中的OP states值实际上并不重要。但我可以假设范围在0-1000之间。这是一个可以使用O(n)排序的经典案例

我们创建一个大小为
range+1
的数组,在本例中为
1001
。然后,我们在数据上循环并增加与数据点对应的每个索引上的值

然后,我们可以压缩生成的数组,删除未递增的值。当我们忽略计数时,这使得值是唯一的

public static void main(String[] args) throws Exception {
    final int[] original = new int[]{1, 1, 2, 8, 9, 8, 4, 7, 4, 9, 1, 1000, 1000};
    System.out.println(Arrays.toString(original));
    final int[] buckets = new int[1001];
    for (final int i : original) {
        buckets[i]++;
    }
    final int[] unique = new int[original.length];
    int count = 0;
    for (int i = 0; i < buckets.length; ++i) {
        if (buckets[i] > 0) {
            unique[count++] = i;
        }
    }
    final int[] compressed = new int[count];
    System.arraycopy(unique, 0, compressed, 0, count);
    System.out.println(Arrays.toString(compressed));
}

如果您创建两个布尔数组:1个用于负值,1个用于正值,并将其全部初始化为false,该怎么办

然后循环遍历输入数组,如果已经遇到该值,则在数组中查找。
如果没有,则将其添加到输出数组中,并将其标记为已使用。

此问题有多种解决方案

  • 排序方法

    • 您可以对数组进行排序,并仅解析唯一的项
  • 集合方法

    • 声明一个哈希集,在其中放置所有项,然后只有唯一项
  • 创建一个布尔数组,表示所有已返回的项(这取决于数组中的数据)


  • 如果处理大量数据,我会选择1。解决方案由于您不需要分配额外的内存,因此排序速度非常快。对于小数据集,复杂性为n^2,但对于大数据集,复杂性为n log n。

    对于排序数组,只需检查下一个索引:

    //sorted data!
    public static int[] distinct(int[] arr) {
        int[] temp = new int[arr.length];
    
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            int current = arr[i];
    
            if(count > 0 )
                if(temp[count - 1] == current)
                    continue;
    
            temp[count] = current;
            count++;
        }
    
        int[] whitelist = new int[count];
        System.arraycopy(temp, 0, whitelist, 0, count);
    
        return whitelist;
    }
    
    //已排序的数据!
    公共静态int[]不同(int[]arr){
    int[]temp=新int[arr.length];
    整数计数=0;
    对于(int i=0;i0)
    如果(温度[计数-1]==当前)
    继续;
    温度[计数]=当前值;
    计数++;
    }
    int[]白名单=新int[count];
    系统阵列复制(临时,0,白名单,0,计数);
    返回白名单;
    }
    
    由于可以假设范围在0-1000之间,因此有一个非常简单有效的解决方案

    //Throws an exception if values are not in the range of 0-1000
    public static int[] removeDuplicates(int[] arr) {
        boolean[] set = new boolean[1001]; //values must default to false
        int totalItems = 0;
    
        for (int i = 0; i < arr.length; ++i) {
            if (!set[arr[i]]) {
                set[arr[i]] = true;
                totalItems++;
            }
        }
    
        int[] ret = new int[totalItems];
        int c = 0;
        for (int i = 0; i < set.length; ++i) {
            if (set[i]) {
                ret[c++] = i;
            }
        }
        return ret;
    }
    
    //如果值不在0-1000范围内,则引发异常
    公共静态int[]移除副本(int[]arr){
    boolean[]set=new boolean[1001];//值必须默认为false
    int totalItems=0;
    对于(int i=0;i

    它以线性时间O(n)运行。警告:返回的数组是经过排序的,因此如果这是非法的,那么这个答案是无效的。

    这是对数组中的元素进行排序的简单方法

    public class DublicatesRemove {
        public static void main(String args[]) throws Exception {
    
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("enter size of the array");
            int l = Integer.parseInt(br.readLine());
            int[] a = new int[l];
            // insert elements in the array logic
            for (int i = 0; i < l; i++) 
            {
                System.out.println("enter a element");
                int el = Integer.parseInt(br.readLine());
                a[i] = el;
            }
            // sorting elements in the array logic
            for (int i = 0; i < l; i++) 
            {
                for (int j = 0; j < l - 1; j++) 
                {
                    if (a[j] > a[j + 1])
                    {
                        int temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                }
            }
            // remove duplicate elements logic
            int b = 0;
            a[b] = a[0];
            for (int i = 1; i < l; i++)
            {
                if (a[b] != a[i])
                {
                    b++;
                    a[b]=a[i];
    
                }
    
            }
            for(int i=0;i<=b;i++)
            {
                System.out.println(a[i]);
            }
    
    
        }
    }
    
    public类DublicatesRemove{
    公共静态void main(字符串args[])引发异常{
    BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
    System.out.println(“输入数组的大小”);
    int l=Integer.parseInt(br.readLine());
    int[]a=新的int[l];
    //在数组逻辑中插入元素
    对于(int i=0;ia[j+1])
    {
    内部温度=a[j];
    a[j]=a[j+1];
    a[j+1]=温度;
    }
    }
    }
    //删除重复的逻辑元素
    int b=0;
    a[b]=a[0];
    对于(int i=1;ipublicstaticvoidmain(字符串args[]){
    int[]intarray={1,2,3,4,5,1,2,3,4,5,1,2,3,4,5};
    Set=newhashset();
    用于(int i:intarray){
    
    public static void main(String[] args) throws Exception {
        final int[] original = new int[]{1, 1, 2, 8, 9, 8, 4, 7, 4, 9, 1, 1000, 1000};
        System.out.println(Arrays.toString(original));
        final int[] buckets = new int[1001];
        for (final int i : original) {
            buckets[i]++;
        }
        final int[] unique = new int[original.length];
        int count = 0;
        for (int i = 0; i < buckets.length; ++i) {
            if (buckets[i] > 0) {
                unique[count++] = i;
            }
        }
        final int[] compressed = new int[count];
        System.arraycopy(unique, 0, compressed, 0, count);
        System.out.println(Arrays.toString(compressed));
    }
    
    [1, 1, 2, 8, 9, 8, 4, 7, 4, 9, 1, 1000, 1000]
    [1, 2, 4, 7, 8, 9, 1000]
    
    //sorted data!
    public static int[] distinct(int[] arr) {
        int[] temp = new int[arr.length];
    
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            int current = arr[i];
    
            if(count > 0 )
                if(temp[count - 1] == current)
                    continue;
    
            temp[count] = current;
            count++;
        }
    
        int[] whitelist = new int[count];
        System.arraycopy(temp, 0, whitelist, 0, count);
    
        return whitelist;
    }
    
    //Throws an exception if values are not in the range of 0-1000
    public static int[] removeDuplicates(int[] arr) {
        boolean[] set = new boolean[1001]; //values must default to false
        int totalItems = 0;
    
        for (int i = 0; i < arr.length; ++i) {
            if (!set[arr[i]]) {
                set[arr[i]] = true;
                totalItems++;
            }
        }
    
        int[] ret = new int[totalItems];
        int c = 0;
        for (int i = 0; i < set.length; ++i) {
            if (set[i]) {
                ret[c++] = i;
            }
        }
        return ret;
    }
    
    public class DublicatesRemove {
        public static void main(String args[]) throws Exception {
    
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("enter size of the array");
            int l = Integer.parseInt(br.readLine());
            int[] a = new int[l];
            // insert elements in the array logic
            for (int i = 0; i < l; i++) 
            {
                System.out.println("enter a element");
                int el = Integer.parseInt(br.readLine());
                a[i] = el;
            }
            // sorting elements in the array logic
            for (int i = 0; i < l; i++) 
            {
                for (int j = 0; j < l - 1; j++) 
                {
                    if (a[j] > a[j + 1])
                    {
                        int temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                }
            }
            // remove duplicate elements logic
            int b = 0;
            a[b] = a[0];
            for (int i = 1; i < l; i++)
            {
                if (a[b] != a[i])
                {
                    b++;
                    a[b]=a[i];
    
                }
    
            }
            for(int i=0;i<=b;i++)
            {
                System.out.println(a[i]);
            }
    
    
        }
    }
    
    public static void main(String args[]) {
        int[] intarray = {1,2,3,4,5,1,2,3,4,5,1,2,3,4,5};
    
        Set<Integer> set = new HashSet<Integer>();
        for(int i : intarray) {
            set.add(i);
        }
    
        Iterator<Integer> setitr = set.iterator();
        for(int pos=0; pos < intarray.length; pos ++) {
            if(pos < set.size()) {
                intarray[pos] =setitr.next();
            } else {
                intarray[pos]= 0;
            }
        }
    
        for(int i: intarray)
        System.out.println(i);
    }
    
        public static int[] removeDuplicates(int[] numbers) {
        Entry[] entries = new Entry[numbers.length];
        int size = 0;
        for (int i = 0 ; i < numbers.length ; i++) {
            int nextVal = numbers[i];
            int index = nextVal % entries.length;
            Entry e = entries[index];
            if (e == null) {
                entries[index] = new Entry(nextVal);
                size++;
            } else {
                if(e.insert(nextVal)) {
                    size++;
                }
            }
        }
        int[] result = new int[size];
        int index = 0;
        for (int i = 0 ; i < entries.length ; i++) {
            Entry current = entries[i];
            while (current != null) {
                result[i++] = current.value;
                current = current.next;
            }
        }
        return result;
    }
    
    public static class Entry {
        int value;
        Entry next;
    
        Entry(int value) {
            this.value = value;
        }
    
        public boolean insert(int newVal) {
            Entry current = this;
            Entry prev = null;
            while (current != null) {
                if (current.value == newVal) {
                    return false;
                } else if(current.next != null) {
                    prev = current;
                    current = next;
                }
            }
            prev.next = new Entry(value);
            return true;
        }
    }
    
    class Demo 
    {
        public static void main(String[] args) 
        {
            int a[]={3,2,1,4,2,1};
            System.out.print("Before Sorting:");
            for (int i=0;i<a.length; i++ )
            {
                System.out.print(a[i]+"\t");
            }
            System.out.print ("\nAfter Sorting:");
            //sorting the elements
            for(int i=0;i<a.length;i++)
            {
                for(int j=i;j<a.length;j++)
                {
                    if(a[i]>a[j])
                    {
                        int temp=a[i];
                        a[i]=a[j];
                        a[j]=temp;
                    }
    
                }
            }
    
            //After sorting
            for(int i=0;i<a.length;i++)
            {
                System.out.print(a[i]+"\t");
            }
            System.out.print("\nAfter removing duplicates:");
            int b=0;
            a[b]=a[0];
            for(int i=0;i<a.length;i++)
            {
                if (a[b]!=a[i])
                {
                    b++;
                    a[b]=a[i];
                }
            }
            for (int i=0;i<=b;i++ )
            {
                System.out.print(a[i]+"\t");
            }
        }
    }
      OUTPUT:Before Sortng:3 2 1 4 2 1 After Sorting:1 1 2 2 3 4 
                    Removing Duplicates:1 2 3 4
    
    int tempvar=0; //Variable for the final array without any duplicates
         int whilecount=0;    //variable for while loop
         while(whilecount<(nsprtable*2)-1) //nsprtable can be any number
         {
    //to check whether the next value is idential in case of sorted array       
    if(temparray[whilecount]!=temparray[whilecount+1])
            {
                finalarray[tempvar]=temparray[whilecount];
                tempvar++;
                whilecount=whilecount+1;
            }
            else if (temparray[whilecount]==temparray[whilecount+1])
            {
                finalarray[tempvar]=temparray[whilecount];
                tempvar++;
                whilecount=whilecount+2;
            }
         }
    
    int[] input = new int[]{1, 1, 3, 7, 7, 8, 9, 9, 9, 10};
    int current = input[0];
    boolean found = false;
    
    for (int i = 0; i < input.length; i++) {
        if (current == input[i] && !found) {
            found = true;
        } else if (current != input[i]) {
            System.out.print(" " + current);
            current = input[i];
            found = false;
        }
    }
    System.out.print(" " + current);
    
      1 3 7 8 9 10
    
    package com.pari.practice;
    
    import java.util.HashSet;
    import java.util.Iterator;
    
    import com.pari.sort.Sort;
    
    public class RemoveDuplicates {
    
     /**
     * brute force- o(N square)
     * 
     * @param input
     * @return
     */
    public static int[] removeDups(int[] input){
        boolean[] isSame = new boolean[input.length];
        int sameNums = 0;
    
        for( int i = 0; i < input.length; i++ ){
            for( int j = i+1; j < input.length; j++){
                if( input[j] == input[i] ){ //compare same
                    isSame[j] = true;
                    sameNums++;
                }
            }
        }
    
        //compact the array into the result.
        int[] result = new int[input.length-sameNums];
        int count = 0;
        for( int i = 0; i < input.length; i++ ){
            if( isSame[i] == true) {
                continue;
            }
            else{
                result[count] = input[i];
                count++;
            }
        }
    
        return result;
    }
    
    /**
     * set - o(N)
     * does not guarantee order of elements returned - set property
     * 
     * @param input
     * @return
     */
    public static int[] removeDups1(int[] input){
        HashSet myset = new HashSet();
    
        for( int i = 0; i < input.length; i++ ){
            myset.add(input[i]);
        }
    
        //compact the array into the result.
        int[] result = new int[myset.size()];
        Iterator setitr = myset.iterator();
        int count = 0;
        while( setitr.hasNext() ){
            result[count] = (int) setitr.next();
            count++;
        }
    
    return result;
    }
    
    /**
     * quicksort - o(Nlogn)
     * 
     * @param input
     * @return
     */
    public static int[] removeDups2(int[] input){
        Sort st = new Sort();
        st.quickSort(input, 0, input.length-1); //input is sorted
    
        //compact the array into the result.
        int[] intermediateResult = new int[input.length];
        int count = 0;
        int prev = Integer.MIN_VALUE;
        for( int i = 0; i < input.length; i++ ){
            if( input[i] != prev ){
                intermediateResult[count] = input[i];
                count++;
            }
            prev = input[i];
        }
    
        int[] result = new int[count];
        System.arraycopy(intermediateResult, 0, result, 0, count);
    
        return result;
    }
    
    
    public static void printArray(int[] input){
        for( int i = 0; i < input.length; i++ ){
            System.out.print(input[i] + " ");
        }
    }
    
    public static void main(String[] args){
        int[] input = {5,6,8,0,1,2,5,9,11,0};
        RemoveDuplicates.printArray(RemoveDuplicates.removeDups(input));
        System.out.println();
        RemoveDuplicates.printArray(RemoveDuplicates.removeDups1(input));
        System.out.println();
        RemoveDuplicates.printArray(RemoveDuplicates.removeDups2(input));
    }
    }
    
    public static int[] removeDuplicates(int[] arr){
        int end = arr.length;
    
        for (int i = 0; i < end; i++) {
            for (int j = i + 1; j < end; j++) {
                if (arr[i] == arr[j]) {                  
                    /*int shiftLeft = j;
                    for (int k = j+1; k < end; k++, shiftLeft++) {
                        arr[shiftLeft] = arr[k];
                    }*/
                    arr[j] = arr[end-1];
                    end--;
                    j--;
                }
            }
        }
    
        int[] whitelist = new int[end];
        /*for(int i = 0; i < end; i++){
            whitelist[i] = arr[i];
        }*/
        System.arraycopy(arr, 0, whitelist, 0, end);
        return whitelist;
    }
    
    public static void main(String[] args) {
            Integer[] intArray = { 1, 1, 1, 2, 4, 2, 3, 5, 3, 6, 7, 3, 4, 5 };
            Integer[] finalArray = removeDuplicates(intArray);
            System.err.println(Arrays.asList(finalArray));
        }
    
        private static Integer[] removeDuplicates(Integer[] intArray) {
            int count = 0;
            Integer[] interimArray = new Integer[intArray.length];
            for (int i = 0; i < intArray.length; i++) {
                boolean exists = false;
                for (int j = 0; j < interimArray.length; j++) {
                    if (interimArray[j]!=null && interimArray[j] == intArray[i]) {
                        exists = true;
                    }
                }
                if (!exists) {
                    interimArray[count] = intArray[i];
                    count++;
                }
            }
            final Integer[] finalArray = new Integer[count];
            System.arraycopy(interimArray, 0, finalArray, 0, count);
            return finalArray;
        }
    
        int[] input = new int[1000000];
    
        for (int i = 0; i < input.length; i++) {
            Random random = new Random();
            input[i] = random.nextInt(200000);
        }
    
        long startTime1 = new Date().getTime();
        System.out.println("Set start time:" + startTime1);
    
        Set<Integer> resultSet = new HashSet<Integer>();
    
        for (int i = 0; i < input.length; i++) {
            resultSet.add(input[i]);
        }
    
        long endTime1 = new Date().getTime();
        System.out.println("Set end time:"+ endTime1);
        System.out.println("result of set:" + (endTime1 - startTime1));     
        System.out.println("number of Set:" + resultSet.size() + "\n");
    
        long startTime2 = new Date().getTime();
        System.out.println("Map start time:" + startTime1);
    
        Map<Integer, Integer> resultMap = new HashMap<Integer, Integer>();
    
        for (int i = 0; i < input.length; i++) {
            if (!resultMap.containsKey(input[i]))
                resultMap.put(input[i], input[i]);
        }
    
        long endTime2 = new Date().getTime();
        System.out.println("Map end Time:" + endTime2);
        System.out.println("result of Map:" + (endTime2 - startTime2));
        System.out.println("number of Map:" + resultMap.size());
    
    Set start time:1441960583837
    Set end time:1441960583917
    result of set:80
    number of Set:198652
    
    Map start time:1441960583837
    Map end Time:1441960583983
    result of Map:66
    number of Map:198652
    
    package arrays.duplicates;
    
    import java.lang.reflect.Array;
    import java.util.Arrays;
    
    public class ArrayDuplicatesRemover<T> {
    
        public static <T> T[] removeDuplicates(T[] input, Class<T> clazz) {
            T[] output = (T[]) Array.newInstance(clazz, 0);
            for (T t : input) {
                if (!inArray(t, output)) {
                    output = Arrays.copyOf(output, output.length + 1);
                    output[output.length - 1] = t;
                }
            }
            return output;
        }
    
        private static <T> boolean inArray(T search, T[] array) {
            for (T element : array) {
                if (element.equals(search)) {
                    return true;
                }
            }
            return false;
        }
    
    }
    
    package arrays.duplicates;
    
    import java.util.Arrays;
    
    public class TestArrayDuplicates {
    
        public static void main(String[] args) {
            Integer[] array = {1, 1, 2, 2, 3, 3, 3, 3, 4};
            testArrayDuplicatesRemover(array);
        }
    
        private static void testArrayDuplicatesRemover(Integer[] array) {
            final Integer[] expectedResult = {1, 2, 3, 4};
            Integer[] arrayWithoutDuplicates = ArrayDuplicatesRemover.removeDuplicates(array, Integer.class);
            System.out.println("Array without duplicates is supposed to be: " + Arrays.toString(expectedResult));
            System.out.println("Array without duplicates currently is: " + Arrays.toString(arrayWithoutDuplicates));
            System.out.println("Is test passed ok?: " + (Arrays.equals(arrayWithoutDuplicates, expectedResult) ? "YES" : "NO"));
        }
    
    }
    
    Array without duplicates is supposed to be: [1, 2, 3, 4]
    Array without duplicates currently is: [1, 2, 3, 4]
    Is test passed ok?: YES
    
     public static int[] removeDuplicates(int[] array) {
        int[] nums =new int[array.length];
        int addedNum = 0;
        int j=0;
        for(int i=0;i<array.length;i++) {
            if (addedNum != array[i]) {
            nums[j] = array[i];
            j++;
            addedNum = nums[j-1];
            }
        }
        return Arrays.copyOf(nums, j);
    }
    
    public static int[] removeDuplicates(int[] arr) {
        ArrayList<Integer> out = new ArrayList<>();
        int n = arr.length;
        BloomFilter<Integer> bf = new BloomFilter<>(...);  // decide how many bits and how many hash functions to use (compromise between space and false positive rate)
    
        for (int e : arr) {
            boolean might_contain = !bf.put(e);
            boolean found = false;
            if (might_contain) {
                // check if false positive
                for (int u : out) {
                    if (u == e) {
                        found = true;
                        break;
                    }
                }
            }
            if (!found) {
                out.add(e);
            }
        }
        return out.stream().mapToInt(i -> i).toArray();
    }
    
    public class RemoveDuplicates {
    
    public static void main(String[] args) {
    
        int[] arr = { 1, 2, 3, 4, 2, 3, 1 }; // input array
        int len = arr.length;
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < len; j++) {
                if (arr[i] == arr[j]) {
                    while (j < (len) - 1) {
                        arr[j] = arr[j - 1];
                        j++;
                    }
                    len--;
                }
            }
        }
        for (int i = 0; i < len; i++) {
            System.out.print("  " +arr[i]);
        }
    
       }
     }
    
    public String removeDuplicates(char[] arr) {
            StringBuilder sb = new StringBuilder();
    
            if (arr == null)
                return null;
            int len = arr.length;
    
            if (arr.length < 2)
                return sb.append(arr[0]).toString();
    
            for (int i = 0; i < len; i++) {
    
                for (int j = i + 1; j < len; j++) {
                    if (arr[i] == arr[j]) {
                        arr[j] = 0;
    
                    }
                }
                if (arr[i] != 0)
                    sb.append(arr[i]);
            }
    
            return sb.toString().trim();
        }
    
    public void removeDup(){ 
    String[] arr = {"1","1","2","3","3"};
              boolean exists = false;
              String[] arr2 = new String[arr.length];
              int count1 = 0;
              for(int loop=0;loop<arr.length;loop++)
                {
                  String val = arr[loop];
                  exists = false;
                  for(int loop2=0;loop2<arr2.length;loop2++)
                  {     
                      if(arr2[loop2]==null)break;
                      if(arr2[loop2]==val){
                            exists = true;
                    }
                  }
                  if(!exists) {
                        arr2[count1] = val;
                        count1++;
                  }
                }
    }
    
     package javaa;
    
    public class UniqueElementinAnArray 
    {
    
     public static void main(String[] args) 
     {
        int[] a = {10,10,10,10,10,100};
        int[] output = new int[a.length];
        int count = 0;
        int num = 0;
    
        //Iterate over an array
        for(int i=0; i<a.length; i++)
        {
            num=a[i];
            boolean flag = check(output,num);
            if(flag==false)
            {
                output[count]=num;
                ++count;
            }
    
        }
    
        //print the all the elements from an array except zero's (0)
        for (int i : output) 
        {
            if(i!=0 )
                System.out.print(i+"  ");
        }
    
    }
    
    /***
     * If a next number from an array is already exists in unique array then return true else false
     * @param arr   Unique number array. Initially this array is an empty.
     * @param num   Number to be search in unique array. Whether it is duplicate or unique.
     * @return  true: If a number is already exists in an array else false 
     */
    public static boolean check(int[] arr, int num)
    {
        boolean flag = false;
        for(int i=0;i<arr.length; i++)
        {
            if(arr[i]==num)
            {
                flag = true;
                break;
            }
        }
        return flag;
    }
    
    public int[] removeDup(int[] nums) {
      Arrays.sort(nums);
      int x = 0;
      for (int i = 0; i < nums.length; i++) {
        if (i == 0 || nums[i] != nums[i - 1]) {
        nums[x++] = nums[i];
        }
      }
      return Arrays.copyOf(nums, x);
    }
    
    Arrays.stream(arr).distinct().toArray();
    
    import java.util.Arrays;
    
    public class Practice {
    
    public static void main(String[] args) {
        int a[] = { 1, 3, 3, 4, 2, 1, 5, 6, 7, 7, 8, 10 };
        Arrays.sort(a);
        int j = 0;
        for (int i = 0; i < a.length - 1; i++) {
            if (a[i] != a[i + 1]) {
                a[j] = a[i];
                j++;
            }
        }
        a[j] = a[a.length - 1];
        for (int i = 0; i <= j; i++) {
            System.out.println(a[i]);
        }
    
    }
    }
    **This is the most simplest way**
    
    function removeDuplicates_sorted(arr){
    
    let j = 0; 
    
    for(let x = 0; x < arr.length - 1; x++){
        
        if(arr[x] != arr[x + 1]){ 
            arr[j++] = arr[x];
        }
    }
    
    arr[j++] = arr[arr.length - 1];
    arr.length = j;
    
    return arr;
    
    function removeDuplicates_unsorted(arr){
    
    let map = {};
    let j = 0;
    
    for(var numbers of arr){
        if(!map[numbers]){
            map[numbers] = 1;
            arr[j++] = numbers;
        }
    }
    
    arr.length = j;
    
    return arr;