java数组去重怎么去除?java实现数组去重方法

TheDisguiser 2020-06-03 20:17:37 java常见问答 5105

在数组中数据有时候会非常之多,这时候就容易出现重复的数据,会给数据库造成性能过载问题,下面我们就来看看如何解决数组出现重复数据问题吧。

只使用数组的话,一般而言有三种去重方法,如下:

一、定义一个新的数组长度并与旧数组的长度一样,存储除去重复数据的旧数组的数据和0

package demo01;
import java.sql.Array;
import java.util.Arrays;
/*JAVA数组去重**/
public class ArrayQC
{
    public static void main(String[] args)
    {
        // 获取一个无重复元素的数组
        int[] arr = new int[]
        {
            11
            , 22
            , 22
            , 33
            , 44
            , 55
            , 44
            , 66
            , 66
            , 66
        };
        // 先确定新数组的长度
        int[] newArr = new int[arr.length];
        int index = 0; // 新数组存储元素索引(或者说无重复的个数)
        outer: 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("arr[i]:"+arr[i]+"arr[j]:"+arr[j]);
                    continue outer;
                }
            }
            // 后面没有与当前元素重复的值,保存这个数
            //System.out.println("for内的index:"+index);
            newArr[index] = arr[i];
            index++;
        }
        // 新数组中存储着无重复的值和后面一些无效的0
        //System.out.println("index:"+index);
        int[] result = new int[index];
        for (int i = 0; i < index; i++)
        { // 遍历有效值个数
            result[i] = newArr[i];
        }
        System.out.println(Arrays.toString(result));
    }
}

二、把数组中的一个数据和其他数据进行比较,如果有一个重复时,就直接开始创建新数组把重复的元素去除,并重新赋给旧数组

public static void main(String[] args)
{
    int[] arr = {
        1
        , 1
        , 1
        , 1
        , 5
        , 3
        , 3
        , 4
        , 8
        , 8
        , 8
        , 8
    }; // 1, 5, 3, 4, 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("arr[i]:"+arr[i]+",arr[j]"+arr[j]);
                // return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系)
                arr = aa(arr, j);
                // 改变的数组中新数据顶替了覆盖数组的就数据,所以还要重新比较一次
                // { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 下标 0 1 2
                // 当下标为1被删除了 ,下标2的数据补上 0 2 这个新元素还没有被比较,所以要再比较一次,所以j--
                //System.out.println("j:"+j); 
                j--;
            }
        }
    }
    for (int i = 0; i < arr.length; i++)
    {
        System.out.println(arr[i]);
    }
}
// 需要获得旧数组和重复元素的下标,然后改成新数组并返回出来新数组
public static int[] aa(int[] arr, int index)
{
    // 新数组,每发现一个就去除一个.所以长度-1 就行
    int[] newArr = new int[arr.length - 1];
    // 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标
    int c = 0;
    for (int i = 0; i < arr.length; i++)
    {
        // 判断传进来的那个重复的下标和数组中的下标相等时,下标的元素就不用重新赋给新数组了
        if (index != i)
        {
            newArr[c] = arr[i];
            c++;
        }
    }
    //System.out.println("newArr:"+newArr.toString());
    //bl(newArr);
    return newArr;
}

三、把相同的一起删除,当发现相同的元素,先统计重复的个数,然后一起删掉,得到新数组赋给旧数组

public static void main(String[] args)
{
    int[] arr = {
        8
        , 1
        , 1
        , 1
        , 1
        , 5
        , 3
        , 3
        , 4
        , 8
        , 8
        , 8
        , 8
    };
    arr = a2(arr);
    for (int i = 0; i < arr.length; i++)
    {
        System.out.println(arr[i]);
    }
}
public static int[] a2(int[] arr)
{
    int a = 0;
    for (int i = 0; i < arr.length - 1; i++)
    {
        for (int j = i; j < arr.length - 1; j++)
        {
            // 如果有相同的,就统计出相同元素的个数
            if (arr[i] == arr[j + 1])
            {
                a += 1;
            }
        }
        if (a != 0)
        {
            // return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系)
            arr = a1(arr, arr[i], a);
            // 一个元素个数获得到,统计变量清零,等待回去下一个元素重复的个数
            a = 0;
        }
    }
    System.out.print("方法a2:");
    bl(arr);
    return arr;
}
// 删除里面重复的元素
public static int[] a1(int[] arr, int arr2, int a)
{
    // 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标
    int c = 1;
    // 获得新数组的长度,就是旧数组减去元素重复的次数
    int[] aa = new int[arr.length - a];
    // 重复的元素也要保留一个
    aa[0] = arr2;
    for (int i = 0; i < arr.length; i++)
    {
        // 不与重复元素相同的元素都非给新数组
        if (arr2 != arr[i])
        {
            aa[c++] = arr[i];
        }
    }
    System.out.print("方法a1:");
    bl(aa);
    return aa;
}
//遍历数组
public static void bl(int[] arr)
{
    for (int i = 0; i < arr.length; i++)
    {
        System.out.print(arr[i] + ",    ");
    }
    System.out.println("数组遍历完毕。");
}

以上就是关于数组去除重复数据的所有内容了,数据库是java项目的最重要的核心,性能问题是最重要的,如果你还想了解数组相关java入门知识,就请一直关注我们的网站吧。

推荐阅读:

java数组转字符串要如何转换?一般有几种方法?

java字符串数组定义是?字符串数组如何转换成字符串?

java数组转list该怎么转型?java数组是什么?