黑马程序员技术交流社区

标题: 数组去重问题 [打印本页]

作者: Kingchen    时间: 2016-5-26 22:13
标题: 数组去重问题
本帖最后由 Kingchen 于 2016-5-27 22:11 编辑

/*
分析以下需求,并用代码实现:(目前数组操作完成,学完集合使用集合完成)
        (1)定义一个int类型的一维数组,内容为{6,2,9,6,1,2,6,7,8}
        (2)去除上面定义的数组中的重复元素,打印最终结果{6, 2, 9, 1, 7, 8}
*/
import java.util.Arrays;//导入类
class Test2{
        public static void main(String[] args){
                int[] arr = {6,2,9,6,1,2,6,7,8};
                System.out.println("含重数组是:"+Arrays.toString(arr));        
                arr = getSingleArray(arr);
                System.out.println("去重数组是:"+Arrays.toString(arr));
        }

        //数组去重的方法
        public static int[] getSingleArr(int[] arr){
                //index表示既能表示当前存入数据在新数组中的位置,又能表示存数新数组中的数据的个数
                int index = 0;
                //1.定义一个和老数组长度相同的数组
                int[] newArr = new int[arr.length];
                //2.遍历老数组的内容
                for (int i=0; i<arr.length; i++){
                        //3.定义flag标记,表示新数组中是否包含当前遍历到的老数组内容
                        boolean flag = false;//如果有重复的数,则标记为true
                        //4.遍历新数组,查看是否包含老数组中的当前元素,如果不包含,flag置为true
    for (int j=0; j<newArr.length; j++){
                                /*第一次拿出老数组的第一个元素和新数组的元素挨个比较,如果有重复的值则将
                                  flag标记为false,并且跳出for循环,没必要和newArr数组的元素进行比较了
                                */
                                if (arr==newArr[j]){//
                                        flag = true;
                                        break;
                                }
                        }
                        /*5.flag为false时说明新数组中不包含当前遍历的老数组的内容,
                        并将当前遍历的老数组的元素存入新数组中*/
                        if (!flag){        //当flag为false是执行,falg为true不会执行,非true即false,就不会执行if里面的内容
                                newArr[index++] = arr;
           }
                }
                //完成以上步骤可以将重复的元素去掉,但是数组的长度并没有改变,剩下的含有0
                /*
                        例如:未去重的数组[6, 2, 9, 6, 1, 2, 6, 7, 8]
                                  去重后的数组[6, 2, 9, 1, 7, 8, 0, 0, 0]
                        所以应该把0去掉,前面的index已经记录了数组的有效长度
                */
                int[] returnArr = new int[index];
                //将去重数组的元素赋值给返回数组
                for (int i=0; i<index; i++){
                        returnArr = newArr;
                }
                //最后将数组返回
                return returnArr;
        }
}

/*
        方法中new出来的数组也是存储在堆内存中
        arr = getSingleArr(arr);
        是将arr指向了一块新的内存,所以数组的长度变化了。
*/


作者: Kingchen    时间: 2016-5-26 22:17
希望大家多多指教!
作者: lifeiwangyue    时间: 2016-5-26 22:30
与视频说的ArrayList 去除重复  也是建一个新的集合   把不重复放进去  然后再放回原集合
作者: 68帅锅    时间: 2016-5-26 22:36
顶贴走人
作者: liukai3385    时间: 2016-5-26 22:42

作者: 小忧伤    时间: 2016-5-26 22:54
{:2_34:}{:2_34:}
作者: 我有上将潘凤    时间: 2016-5-26 22:57
厉害。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2