文档章节

数组去重复,从特殊到一般

zuodev
 zuodev
发布于 2016/04/20 21:24
字数 726
阅读 14
收藏 0


数组去重复,题目: 原始数组是{4,2,4,6,1,2,4,7,8},得到结果{4,2,6,1,7,8}


对数组操作如果想得到新数组,面临的问题是

1,新数组的长度是不一定的,即要指定一个可变长度的数组。

2,如何从旧数组中删除元素(或者说往新数组里增加元素)。

这两点数组都是不具备的,那么有此特性的就是集合了。


HashSet也可以去重,但是HashSet会将数据随机输出,会打乱原有的顺序。如果不打乱原有顺序,就要覆写hashCode、equals方法。】


分别用remove、add方法实现

说一下这里方法的思想(有点像选择排序):拿第1个与第2个、第3个、第4个、第5个、、、、、、比较,如果重复,就从list里去掉,得到新的list

再拿新的list的第2个与第3个、第4个、第5个、、、、、、比较,如果重复,就从list里去掉,得到新的list。

、、、、、、

就得到了不重复的数组了。

public static void main(String[] args) {
  List<Integer> all = new ArrayList<>();
  int[] num = { 4, 2, 4, 6, 1, 2, 4, 7, 8 };
  for (int i = 0; i < num.length; i++) {
   all.add(num[i]);
  }
  for (int i = 0; i < all.size(); i++) {
   int x = all.get(i);
   for (int j = 1 + i; j < all.size(); j++) {
    if (x == all.get(j)) {
     all.remove(j);
    }
   }
  }
  System.out.println(all);
 }

还有个比较简洁的方法,利用list的 boolean  contains  ()方法

public static void main(String[] args) {
        int[] arr = { 4, 2, 4, 6, 1, 2, 4, 7, 8 };
        //创建对象
        //这里没有泛型,若果有泛型则报错
        List data = new ArrayList();
        //增强for
        for (int num : arr) {
            if (!data.contains(num)) {
                data.add(num);
            }
        }
        //打印数组
        System.out.println(data);
    }



由以上案例,总结了数组去除元素的方法。

去重最好是用往新集合里add元素的方法。remove的话,比较麻烦,容易出错,因为每次remove总是删除第一次出现的,并且remove后,集合的长度就变了,再遍历的话就容易出错。

如果用remove:

1、遍历原数组,用一个新数组记录指定元素出现的角标,

2、遍历角标得到值,在集合中删除。


用add方法,代码如下:

public class RemoveArrayElement {

	public static void main(String[] args) {

		int[] arr = { 1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5 };

		removeRepeatValue(arr);

		removeValue(arr, 0);

	}

	/**
	 * 去除数组中重复元素
	 * 
	 * @param arr
	 *            要操作的数组
	 */
	public static void removeRepeatValue(int[] arr) {

		List list = new ArrayList();

		for (int i = 0; i < arr.length; i++) {
			if (list.contains(arr[i]))
				continue; // 新的集合中已有此元素,则不存储
			list.add(arr[i]);
		}

		System.out.println("数组去重:" + list + "新数组长度:" + list.size());
	}

	/**
	 * 去除数组中的指定元素
	 * 
	 * @param arr
	 *            要操作的数组
	 * @param value
	 *            要去除的元素
	 */
	public static void removeValue(int[] arr, int value) {

		List list = new ArrayList();

		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == value)
				continue; // 如果是要去除的元素,则不存储
			list.add(arr[i]);
		}

		System.out.println("去除数组中的" + value + ":" + list + "新数组长度:"
				+ list.size());
	}

}



© 著作权归作者所有

zuodev
粉丝 0
博文 37
码字总数 18402
作品 0
静安
高级程序员
私信 提问
老生常谈:问你数组去重的时候你该怎么答?

行文之前,还是再三提醒自己,追求小而美的思想,长话短说。。。 之前我专门写了一篇关于类数组的介绍的文章 五分钟全面了解类数组 ,通过与数组的对比比较来让读者了解类数组的相关使用方法...

小白师兄
2018/08/21
0
0
彻底弄懂ES6中Map和Set

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。构造函数可以接受一个数组作为参数。 Map和Object的区别 一个 的键只能是字符串或者 ,但一个 的键可以是任意值。 ...

pubdreamcc
05/20
0
0
Python3 初学实践案例(13)构建不重复特殊数组

Python3 初学实践案例(13)构建不重复特殊数组 前言 今天遇到一个问题,很难用一句话描述。所以,我用一段文字来描述这个问题。 输入一个数字,比如 , 得到一个这样的数组: 里面的数字可以...

FungLeo
2018/01/23
0
0
菜鸡吃米之旋转数组相关

[TOC] Find Minimum in Rotated SOrted Array 题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Fi......

跑得比谁都慢
2017/11/13
0
0
彻底弄懂ES6中的Map和Set

摘要: 2个很有用的数据结构。 原文:彻底弄懂ES6中的Map和Set 作者:pubdreamcc Fundebug经授权转载,版权归原作者所有。 Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一...

Fundebug
05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.4K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
41
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部