在日常业务开发中,偶尔需要删除列表中的重复数据。这次,一些学生可能会问:为什么不直接使用SET或LINKEDHASHSET?重复数据没有问题吗?
我不得不说,可以提及这个问题的学生非常机智,他们一目了然地看到了问题的本质。
但是,实际业务开发中遇到的情况将更加复杂。例如,列表集合可能是历史记录的问题,也可能是接口的调用返回的类型限制。它只能被列表接受,或者代码写一半。进行多个收集合并时发现了这个问题。有许多原因的原因,此处不会在此处列出。
当发现此问题时,如果可以转换原始代码并将原始列表类型替换为设定类型,则可以直接修改集合的类型修改太大,那么接下来的六种方法将帮助您解决问题。
在官方开始之前,让我们理解这两个群体的概念:无序收集和有序的收集与混乱和秩序。因为在下一种方法中,将反复提及这两组概念,因此有必要在之前弄清楚它们官方开始。
无序集合是指数据读取顺序和数据插入的顺序不一致。1、3、5、7。
有序收集和无序收集概念的概念恰恰相反。它指的是收集的读取顺序和插入顺序的一致性。例如,插入数据的顺序为:1、5、3和7,然后读取顺序为:1、5、3、7。
通过上面的无序收集和有序的收集,我们可以获得有序而无序的概念。订购是指符合我们期望的数据布置和阅读顺序。无序是指不符合我们的数据安排和阅读顺序的顺序期望。
PS:如果对有序和无序的概念不太清楚,那没关系。通过以下示例,我们可以进一步理解它们的含义。
为了使数据变得沉重,我们想到的第一件事是创建一个新的集合,然后散发原始集合。每个循环在原始集合中判断周期项目。只是放弃,因此,在执行周期时,我们将获得无重复元素的集合。实施代码如下:
上述过程实现的结果如下所示:这种方法的优点:理解更简单,最终集合也有序。但是缺点是实现代码有点简单,不是简单而优雅。
自定义清单很重。除了上面的新设置外,我们还可以使用迭代器来循环确定每个数据。如果当前周期数据,该集合中有两个或更多副本,请删除当前元素以删除当前元素,该元素在循环完成后,您还可以获取无重复数据的集合,并且实现代码为以下内容:
上述过程实施的结果如下:该方法的实现小于先前方法的实现代码,不需要新的集合,但是该方法获得的新集合是不当的,订单与该订单不一致与原始集合,因此不是最好的解决方案。
我们知道Hashset天生具有“重型”的特征,那么我们只需要将列表转换为标签集合,实现代码如下:
上述程序的执行结果如下:该方法的实现代码相对简单,但缺点是标签将自动排序,因此新收集的数据排序与原始集合不一致。如果对集合的顺序有要求,则此方法将无法满足当前需求。
由于标签将自动排序并且无法满足需求,因此请使用LinkedHashset,它不仅可以很重并确保收集顺序,并且实现代码如下:
上述程序执行的结果如下所示:
从上面的代码和执行结果中可以看出,LinkedHashset到目前为止已经存在,并且与原始集合的原始集合和原始集合的原始集合保持一致的实现方法是考虑使用它的一种方法。
除了上述集合外,我们还可以使用Treeset Collection实现除湿功能,并且代码如下:
以上程序的结果如下所示:令人遗憾的是,尽管Treeset也更简单,但它与Hashset具有相同的问题,并且会自动对其进行排序,因此无法满足我们的需求。
JDK 8为我们带来了一个非常实用的方法流,可以实现许多功能,例如以下重型功能:
上述过程的结果如下所示:流实现DE -HEAVY函数和其他方法。它不需要创建一个新的集合,可以通过接收重量来使用它,并且实现代码也很简单,而且重量很重。随后的收集顺序也与该订单一致原始集合,这是我们首选考虑的最优先方法。
在本文中,我们介绍了最简洁的6种收集方法,并且该订单的顺序可以与权重之后的原始集合一致。在没有新收藏的帮助的情况下,方法是我们优先的优先方法。
正确和非审判,破坏其声誉并迷失。
博客简介:帖子-80年代的程序员已经“持续”了11年,爱好:阅读,慢跑,羽毛球。
我的公共帐户:Java面试真实的问题分析
个人微信:GG_STONE,欢迎观看朋友的圈子并赞美。