list对象去重

转载请标明出处,维权必究:http://77blogs.com/?p=471

咋们来看看。首先定义一个对象,随便吧


 

然后有好多的Data对象放在list数组中,而我们要根据Data对象里面的s来判断list中是否有相同的对象,如果用for循环一个个来比较,那么当里边的对象越多,那么比较的次数也会越来越多,这不是好做法,那应该怎么比较呢?

这就要利用HashSet的性质,不可重复。

 

HashSet如何实现去重:

是通过调用元素内部的hashCode和equals方法实现去重,首先调用hashCode方法,比较两个元素的哈希值,如果哈希值不同,直接
认为是两个对象,停止比较。如果哈希值相同,再去调用equals方法,返回true,认为是一个对象。返回false,认为是两个对象。

HashSet查找的高效性:

Hash算法对每一个对象都计算出一个Hash码,根据Hash码把对象分配到某个存储区域中,比如一个集合包含了很多人,根据国籍,中国人是一个存储区域,美国人是一个存储区域,英国人是一个存储区域,……。这样如果要查找该集合是否包含了某个中国人,就到中国人的存储区域去比较就行了,这样大大提高了效率。

Java中实现了Hash的集合是HashSet。HashSet查找某个对象时,首先用hashCode()方法计算出这个对象的Hash码,然后再根据Hash码到相应的存储区域用equals()方法查找。

 

由此可见利用HashSet去重是可行的。

1、重写比较对象Data的的HashCode与equal方法。


 

2、比较:

 

HashSet h = new HashSet(list); 这一步会将重复的元素去掉,当然,不是随机去掉,而是list中排在后面的与前面相同的去掉。因为是一个个加入HashSet里面的,当然最终得到的结果是无序的,如果需要按照原来的顺序还需要进行排序处理

发布者

大道苍莽,一笔一墨,皆重之。

发表评论