第一种方法(只学到数组的看):
定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0,
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]) { continue outer; } } // 后面没有与当前元素重复的值,保存这个数 newArr[index] = arr[i]; index++; } // 新数组中存储着无重复的值和后面一些无效的0 int[] result = new int[index]; for (int i = 0; i < index; i++) { // 遍历有效值个数 result[i] = newArr[i]; } System.out.println(Arrays.toString(result)); }
第二中方法:
一个一个删除,有一个删一个. 把数组中的一个数据和其他数据进行比较,如果有一个重复时,就直接开始创建新数组把重复的元素去除,并重新赋给旧数组
1 /* 2 * 一个一个删除,有一个删一个. 3 * 把数组中的一个数据和其他数据进行比较,如果有一个重复时,就直接开始创建新数组把重复的元素去除,并重新赋给旧数组 4 */ 5 6 public static void main(String[] args) { 7 8 int[] arr = { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 9 10 for (int i = 0; i < arr.length; i++) { 11 12 for (int j = i + 1; j < arr.length; j++) { 13 14 if (arr[i] == arr[j]) { 15 // return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系) 16 arr = aa(arr, j); 17 // 改变的数组中新数据顶替了覆盖数组的就数据,所以还要重新比较一次 18 /* 19 * { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 下标 0 1 2 20 * 当下标为1被删除了 ,下标2的数据补上 0 2 这个新元素还没有被比较,所以要再比较一次,所以j-- 21 */ 22 j--; 23 } 24 } 25 } 26 27 for (int i = 0; i < arr.length; i++) { 28 System.out.println(arr[i]); 29 } 30 31 } 32 33 // 需要获得旧数组和重复元素的下标,然后改成新数组并返回出来新数组 34 public static int[] aa(int[] arr, int index) { 35 36 // 新数组,没发现一个就去除一个.所以长度-1 就行 37 int[] newArr = new int[arr.length - 1]; 38 // 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标 39 int c = 0; 40 for (int i = 0; i < arr.length; i++) { 41 // 判断传进来的那个重复的下标和数组中的下标相等时,下标的元素就不用重新赋给新数组了 42 if (index != i) { 43 newArr[c] = arr[i]; 44 c++; 45 } 46 } 47 48 return newArr; 49 }
第三种方法;
相同的一起删除,当发现相同的元素,先统计重复的个数,然后一起删掉,得到新数组赋给旧数组
1 /* 相同的一起删除,当发现相同的元素,先统计重复的个数,然后一起删掉,得到新数组赋给旧数组 */ 2 3 public static void main(String[] args) { 4 5 int[] arr = { 8, 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 6 7 arr = a2(arr); 8 9 for (int i = 0; i < arr.length; i++) { 10 System.out.println(arr[i]); 11 } 12 } 13 14 public static int[] a2(int[] arr) { 15 16 int a = 0; 17 18 for (int i = 0; i < arr.length - 1; i++) { 19 20 for (int j = i; j < arr.length - 1; j++) { 21 22 // 如果有相同的,就统计出相同元素的个数 23 if (arr[i] == arr[j + 1]) { 24 a += 1; 25 } 26 } 27 if (a != 0) { 28 // return返回的数字的地址而非数组的数值(不懂的华看一下变量的 名 和所代表的数据地址的关系) 29 arr = a1(arr, arr[i], a); 30 // 一个元素个数获得到,统计变量清零,等待回去下一个元素重复的个数 31 a = 0; 32 } 33 } 34 return arr; 35 } 36 37 // 删除里面重复的元素 38 public static int[] a1(int[] arr, int arr2, int a) { 39 // 因为就数组的下标要去除一个,又不知道那个,所以定义一个变量自增来当新数组的下标 40 int c = 1; 41 // 获得新数组的长度,就是旧数组减去元素重复的次数 42 int[] aa = new int[arr.length - a]; 43 // 重复的元素也要保留一个 44 aa[0] = arr2; 45 for (int i = 0; i < arr.length; i++) { 46 // 不与重复元素相同的元素都非给新数组 47 if (arr2 != arr[i]) { 48 aa[c++] = arr[i]; 49 } 50 } 51 return aa; 52 }