今天阿里笔试崩了,脑子里忘了Set获取元素的用法了,崩盘了,有时候Set集合的特性真好用,正好现在整理一下Set集合
下面不同的Set有统一的特性,那就是不允许集合里的元素重复
HashSet
- 存储顺序和添加顺序不同,
- HashSet不是同步的,如果多个线程修改集合中的值可能会出现错误,线程不安全
- HastSet允许集合中的元素为null
部分特点和HashMap很像,
在HashSet集合中,判断两个元素相同的标准是:两个对象通过equals()方法相等,且HashCode()方法的返回值也相等
LinkedHashSet
LinkedHashSet是HashSet的子类,根据元素的HashCode值决定元素的存储位置,看到Linked就是知道它也是用链表来存储的,所以可以让元素以插入的顺序存储,这样取数据也会有顺序,
感觉和LinkedHashMap差不多
因为LinkedHashSet内部使用LinkedHashMap实现。
TreeSet
TreeSet是SortedSet接口的实现类,看到Sort就知道这是个有排序的set集合,它是按照一定的规则排序,比如升序排序(默认的),降序排序,
当然如果是自定义对象就需要自己进行比较了
- 需要被排序的类实现Comparable接口 , 重写其中的 comparato
- 这种方法需要一个新的类实现Comparator接口 , 重写其中的Compare 方法
这个链接可以去看看~~
把set集合转成list集合就可以获取指定位置的元素了
Set<Integer> set = new HashSet<Integer>();
List<Integer> list1 = new ArrayList<Integer>(set);
使用LinkedHashSet给ArrayList去重并保持顺序
List<String> list= new ArrayList<String>(new LinkedHashSet<String>(list));