import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;
public class TestArry {
public static void main(String[] args) {
int[] a = { 1, 3, 5, 2, 1, 3, 4, 1, 2, 0 , 5, 3, 1, 2, 1, 10 };
int[] b = new int[a.length]; //先定长度与上面的一样的
b[0] = a[0]; //先将a的首位赋给b的第一个元素
int y = 1; //y在之后代表b的真正的有效长度
boolean is = false;
for (int i = 1; i < a.length; i++) { //从a[1] 开始遍历
int count = 0; //设置一个计数器
for (int j = 0; j < b.length; j++) { //遍历整个b数组
if (a[i] != b[j]) { //如果a[1]~最后 的数与b的每一个数进行比较,
count++; //每比一次,不同则计数器加1
}
}
if (count == b.length) { //如果计数器为b的整个长度,说明a[i]与b数组的每一个元素都不同
b[y] = a[i]; //将次元素赋值给b,
y++; //此时,b的有效长度已经出来了,因为b[y]~最后都是无效的
}
}
for (int i = 0; i < a.length; i++) { //遍历a如果a中有0,就要考虑在b中留一个0,但不一定要留,可能b中有效元素有0
if (a[i] == 0) {
is = true;
}
}
for (int i = 0; i < y; i++) { //遍历b的有效元素,如果有0元素,就再不要留一个0元素的
if (b[i] == 0) {
is = false;
}
}
if (is == true) { //is == true说明要多留一个0
int[] c = new int[y+1]; //再定义一个新的数组,长度为y+1,依次赋值得到完美的数组
for (int i = 0; i < y+1; i++) {
c[i] = b[i];
}
System.out.println(Arrays.toString(c));
} else { //说明b中有0元素了,不需要再留0了
int[] c = new int[y]; //再定义一个新的数组,长度为y,依次赋值得到完美的数组
for (int i = 0; i < y; i++) {
c[i] = b[i];
}
System.out.println(Arrays.toString(c));
}
// 方法2 用 set方法
Set<Integer> set = new TreeSet<Integer>();
for (int i : a) {
set.add(i);
}
int[] des = new int[set.size()];
int j = 0;
for (Integer i : set) {
des[j++] = i;
}
System.out.println(Arrays.toString(des));
// 方法三
Arrays.sort(a); //对a排序
int count = 0;
for (int i = 0; i < a.length; i++) {
if (Arrays.binarySearch(a, a[i])==i) { //统计去除重复元素的个数
count++;
}
}
int[] b = new int[count];
int y = 0;
for (int i = 0; i < a.length; i++) {
if (Arrays.binarySearch(a, a[i])==i) {
b[y++] = a[i];
}
}
System.out.println(Arrays.toString(b));
//方法四 缺点会产生过多的垃圾
Arrays.sort(a);
int[] b = new int[0];
int y = 0;
for (int i = 0; i < a.length - 1; i++) { //防止数组越界
if ((a[i] != a[i + 1])) {
b = Arrays.copyOf(b, b.length + 1);
b[y++] = a[i];
}
}
if (a[a.length - 1] != a[a.length - 2]) { //单独为最后两个元素比较是否重复
b = Arrays.copyOf(b, b.length + 1);
b[y] = a[a.length - 1];
}
System.out.println(Arrays.toString(b));
}
}