我们可以假设这样一个流程:从网络上下来一组json数据,不管同步还是异步,第一个就是想先找个容器把他接下来,顺手就把list操起来了,然后就一直add,add,,,但是问题来了,我们不管三期二十七的把数据都接下来了,从来就没注意数据有重复的怎么去除呢,遍历吧,又老土有慢;突然想想如果当初用的是hashset该有多好,那么hashset有什么好呢,简单介绍下要点。
hashset,拆解一下,set说明他来自于集合,集合也就意味着,set里面没有重复的元素,hash就代表着hash结构,就是键值对,hashset的底层就是通过hashmap实现的,它只是封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。 注意哦,这里的hash
set的hash不光要equals,还要hashcode。
那么问题来了,我能不能把他们混合在一起来实现我的目的呢,请看代码:
List listHasCup=new ArrayList();
listHasCup.add(1);
listHasCup.add(2);
listHasCup.add(3);
listHasCup.add(1);
List listNoCup=new ArrayList(new HashSet(listHasCup));
恩,,好了,就是这么简单,多看源码有好处