list对象去重

转载请标明出处,维权必究:http://www.javashuo.com/article/p-kichugqe-ev.html html

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

public class Data{
        public String s;
    }

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

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

 

HashSet如何实现去重:this

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

spa

HashSet查找的高效性:code

Hash算法对每个对象都计算出一个Hash码,根据Hash码把对象分配到某个存储区域中,好比一个集合包含了不少人,根据国籍,中国人是一个存储区域,美国人是一个存储区域,英国人是一个存储区域,......。这样若是要查找该集合是否包含了某个中国人,就到中国人的存储区域去比较就好了,这样大大提升了效率。htm

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

 

因而可知利用HashSet去重是可行的。blog

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

 @Override
    public int hashCode() {
        if (null == s)
            return super.hashCode();
        else {
//相同String的HashCode是同样的,因此若当以前已经有了一个对象,而且s
//与将要加入的对象的s同样,那么因为两个对象有相同HashCode,
//那么他们就会去执行equal方法进行比较,如果同样,后面的对象加入失败
return s.hashCode(); } } @Override public boolean equals(Object obj) { if (null == obj) return false; if (obj == this) return true; if (!(obj instanceof Data)) return false; Data data = (Data) obj; if (data.s.equals(s)) return true; return false; }

二、比较:

List list = new ArrayList<Data>();
for(int i = 0;i<10;i++) {
   Data data = new Date();
   data.s = "" + i;
   list.add(data);
        }

 

HashSet h = new HashSet(list);
list.clear();
list.addAll(h);

HashSet h = new HashSet(list);这一步会将重复的元素去掉,固然,不是随机去掉,而是list中排在后面的与前面相同的去掉。由于是一个个加入HashSet里面的,固然最终获得的结果是无序的,若是须要按照原来的顺序还须要进行排序处理
相关文章
相关标签/搜索