数组去重与生成随机数组

今天分享一下学习数组的一些小心得,在生成随机数组里,可能也有人会和我遇到同样的情况,就是写到判断数组中有两个数相等,但不知道后续怎么操作。

我使用的方法是,在出现这个情况后,给第一个数重新赋值,然后把把i值赋为0,这样数组就会从头再次比较数组是否有相同的数产生。

这个方法虽然可以解决上述问题,但是由于算法太简陋,性能较差,在生成数量级较大的随机数组时不太适合。

package com.demo;
//数组去重
public class test {

    public static void main(String[] args) {

        // 生成一个数组
        int[] is = new int[] { 5, 20, 5, 10, 10 };

        // 生成去重后的数组
        int[] is11 = new int[is.length];

        int count = 0;

        // 数组变量与数组逐一比较
        for (int i = 0; i < is.length; i++) {
            for (int j = 0; j < is.length; j++) {

                // 不和自己比
                if (i != j) {
                    // 当遇到重复的数就跳出循环,不赋值
                    if (is[i] == is[j])
                        break;

                    // 不重复就把值付给数组 is11
                } else {
                    is11[count] = is[i];
                    count++;
                }

            }

        }

        // 输出去重后的数组
        for (int ii : is11) {
            System.out.println(ii);
        }

    }
}
package com.demo;

import java.util.Random;

public class Demo04 {

    public static void main(String[] args) {
        // 1 ~ 10

        int[] sum = getNumMM(20, 30);
        for (int i : sum) {
            System.out.println(i);
        }
    }

    /**
     * 生成num个 num2以内的 数
     * 
     * @param num
     *            个数
     * @param num2
     */
    public static int[] getNumMM(int num, int num2) {

        Random random = new Random();

        int[] sum = new int[num];

        for (int i = 0; i < num; i++) {
            sum[i] = random.nextInt(num2) + 1;
        }

        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num; j++) {
                // 不和自己比
                if (i != j) {

                    /*当遇到数组中有重复的变量,就新建一个,然后给i赋值0,让数组从头再比较数组
                    在这里 i=0 可以优化,改善程序性能*/
                    if (sum[i] == sum[j]) {
                        sum[i] = random.nextInt(num2) + 1;
                        i = 0;
                    }
                } else {

                }

            }
        }

        return sum;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值