Java数组去重

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));

	}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值