版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ezview_uniview/article/details/52463332
应用场景:经常遇到网络请求回来的数据是一个list形式的列表,这个List<T>的数据类型是自己定义的数据类型,这里面包含了重复元素,而重复元素的判断重复的标准往往是自己定义数据类型的某个成员变量来区分,比如,返回的是设备信息,则会有一个对应的设备ID字段,如果是人物信息,返回注册手机号等等。如果通过for循环等手段不仅耗时,还需要同步返回的数据列表。是一个非常令人头疼的问题。高效的解决这个问题途径就是hashset,具体原理暂时先不分析,直接给出应用demo。
比如这是一个返回的设备信息Bean类,和网络返回数据json数据相对应。
public class Devices {
private final static int HashCode = 60;
/**
* 设备id
**/
private String did;
/**
* 设备名称
**/
private String dname;
}
网络请求返回的是一个LIst数组,这时候不要用LIst来转换网络请求结果,直接通过HashSet来转换,而实际上仅通过将数据转换成HashSet数据类型,并不能将重复数据彻底清除,因为hashset还不知道定义为“重复”的标准是什么。因此在上面Devices中添加以下代码:
@Override
public int hashCode() {
return HashCode;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Devices)) {
return false;
}
//对传入对象上转型为Devices对象
Devices mDev = (Devices) obj;
//判断两个对象设备id一致认为是一个设备
return this.did.equals(mDev.getDid());
}
这样返回的数据就可以清除其中重复数据,而不用自己手动删除。关于HashSet的原理,后续研究,总之,这个方法简单快键,非常实用,特此记录。