常用算法篇-集合去重
Posted 小白的梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用算法篇-集合去重相关的知识,希望对你有一定的参考价值。
集合去重
在工作中我们时常需要用到将一个集合中的元素去重的算法,例如如下的场景
我们的需求是 : 月底要开迎新晚会,现在我们已经统计了分别会唱歌的,会跳舞的,会敲代码的学生,然后我们需要把这些会任意才艺表演的学生罗列出来,每人分发小一份礼品
下面我们直接上代码例子来说明:
main方法部分代码
从上图中我们可以看出,我们已经罗列所有会才艺表演的学生,但是姓名有重复,这时候不方便我们分发小礼品,那么我们需要将不重复的姓名罗列出来.
标记法
使用java来实现的话,思路很多,我们着重讲一下标记法,其他方法后续补充:
标记法去重算法
如上图中,我们使用了java的HashMap类的特性,将学生姓名作为key,该学生姓名出现的次数作为value,遍历我们的List,如果标记map中没有出现过遍历的姓名,则添加到新List中并且为该key记录出现一次,如果标记map中出现过遍历的姓名,则不追加到新的list中,但记录该key出现次数加一次.
通过这样的标记算法,我们不仅可以得出不重复的姓名(以便我们为这些才艺表演的学生分发一份礼物),还可以看出小明既会唱歌又会跳舞还会敲代码(即小白会三种才艺表演,小明会两种才艺表演,而小花和小红会一种才艺表演).
set与list转换法
除了标记法,我们还可以使用Set与List之间的转换来去重,但这不是我推荐的方式,有局限性,不能跨语言实现去重,在这边只做简单介绍,如下图:
转换set去重
我们将list作为HashSet构造函数的参数,再将返回的已经不重复的Set作为ArrayList构造函数的参数,这样我们就得到了不重复的学生姓名List.
循环比较法
循环比较法
这应该是我招聘面试过程中,最有可能回答的一种去重方法,但一直都没有碰到能够把思路说清晰透彻的同学
JDK API方法去重
api去重方法
总结:
标记法是小编最推荐的去重算法
平时多关心api中固有方法,并注重思维逻辑的培养
结尾ps:其他同学有更好的去重算法,请留言评论.谢谢
以上是关于常用算法篇-集合去重的主要内容,如果未能解决你的问题,请参考以下文章