请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索
开启左侧

工作常用算法篇-java实现(一)

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
前言:在各类网站论坛上,没有找到与工作比较贴切的技能,所以特此写一些对刚步入工作或者工作中没有重视的技能与问题,各位大牛请及时关闭文章.
ps:文中所有标点都是英文的,看官请不要在意.为了便于平常敲代码,所以中文输入法也默认了英文标点(防止各类因为标点引起的低级错误).纯属个人原创见解,若不正确,请各位批评指正.
集合去重
在工作中我们时常需要用到将一个集合中的元素去重的算法,例如如下的场景
我们的需求是 : 月底要开迎新晚会,现在我们已经统计了分别会唱歌的,会跳舞的,会敲代码的学生,然后我们需要把这些会任意才艺表演的学生罗列出来,每人分发小一份礼品
下面我们直接上代码例子来说明:

155021myn82f3z8npa7dil.jpg

main方法部分代码
从上图中我们可以看出,我们已经罗列所有会才艺表演的学生,但是姓名有重复,这时候不方便我们分发小礼品,那么我们需要将不重复的姓名罗列出来.
标记法

使用java来实现的话,思路很多,我们着重讲一下标记法,其他方法后续补充:
155021iafzx6xtfwt8zgfx.jpg

标记法去重算法
如上图中,我们使用了java的HashMap类的特性,将学生姓名作为key,该学生姓名出现的次数作为value,遍历我们的List,如果标记map中没有出现过遍历的姓名,则添加到新List中并且为该key记录出现一次,如果标记map中出现过遍历的姓名,则不追加到新的list中,但记录该key出现次数加一次.
通过这样的标记算法,我们不仅可以得出不重复的姓名,以便我们为这些才艺表演的学生分发一份礼物,我们还可以看出小明既会唱歌又会跳舞还会敲代码,即会三种才艺表演,小明会两种才艺表演,而小花和小红会一种才艺表演.
set与list转换法

除了标记法,我们还可以使用Set与List之间的转换来去重,但这不是我推荐的方式,有局限性,不能跨语言实现去重,在这边只做简单介绍,如下图:
155021zppbxwpx56qx0u0p.jpg

转换set去重
我们将list作为HashSet构造函数的参数,再将返回的已经不重复的Set作为ArrayList构造函数的参数,这样我们就得到了不重复的学生姓名List.
循环比较法

155021gda2qj3zl2pa9ptt.jpg

循环比较法
这应该是我招聘面试过程中,最有可能回答的一种去重方法,但一直都没有碰到能够把思路说清晰透彻的同学
JDK API方法去重


155022n9upm0m6i0qbounn.jpg

api去重方法
总结:


  • 标记法是小编最推荐的去重算法
  • 平常多关心api中固有方法,并注重思维逻辑的培养
结尾ps:其他同学有更好的去重算法,请留言评论.谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

广告招商