HashSet,TreeSet,LinkedHashSet
Set实现自Collection接口
特点:
- Set中的元素不能重复
- Set中的元素是无序的,取出和存入的顺序不同
如果要比较两个对象是否相等,要重写hashCode方法和equals方法,如果不重写,则两个对象哈希值相等时,才判断为相等。
HashSet,哈希表
- HashSet基于HashMap实现,元素不能重复
- HashSet允许有null值
- HashSet是无序的,不会记录插入的顺序
- HashSet是线程不安全的,即同一时刻可以有多个线程同时写
常用方法:
1.创建
Set<Integer> set = new HashSet<>();
HashSet<String> set2 = new HashSet<>();
2. 添加,add(e)
set2.add("police");
3. 判断元素是否存在,contains(e)
set2.contains("thief"); // boolean
4. 删除,remove(e)
set2.remove("police");
5. 清空,clear()
set.clear();
6. 计算大小,size()
set2.size();
7. 判空,isEmpty()
set.isEmpty();
8. 迭代,for-each
for(String str : set2){
sout(str);
}
TreeSet
TreeSet是一个有序的集合,基于TreeMap实现,继承了Set接口,拥有Set的属性和方法。
- TreeSet默认对元素按照升序排序,也可以在构造时传入Comparator来指定排序方法。
- TreeSet存储对象时,该对象的类要实现Comparable接口,并重写compareTo()方法,否则无法实现对象元素的排序。
- 重写compareTo()方法时,要返回相应的值,小于,等于,大于分别返回负整数,零,正整数。
常用方法:
1. 创建,四种构造方法
TreeSet<Integer> tre1 = new TreeSet<>(); // 默认,按升序排序
TreeSet<Integer> tre2 = new TreeSet<>(Collection c); // 包含集合
TreeSet<Integer> tre3 = new TreeSet<>(Comparator comparator); // 指定比较器
TreeSet<Integer> tre4 = new TreeSet<>(SortedSet set); // 包含set
2. 添加,add(), addAll()
tre1.add(1);
tre1.addAll(c);
3. 判断元素是否存在,contains(e)
4. 判空,isEmpty()
5. 删除,remove()
6. 清空,clear()
7. 计算大小,size()
8. 克隆,clone()
9. 迭代,for-each
以上方法用法与HashSet相同,不再赘述。
TreeSet特有的方法
10. lower(e), floor(e), ceiling(e), higher(e)
tre1.lower(e); // 返回小于e的最大元素
tre1.floor(e); // 返回小于/等于e的最大元素
tre1.ceiling(e); // 返回大于/等于e的最小元素
tre1.higher(e); // 返回大于e的最小元素
11. first(), last(),pollFirst(), pollLast()
tre1.first(); // 返回第一个元素
tre1.last(); // 返回最后一个元素
tre1.pollFirst(); // 返回的同时删除
tre1.pollLast(); // 返回的同时删除
12. headSet(), tailSet(), subSet()
// 返回从头部到toElement的子Set,inclusive表示是否包含toElement,默认为false
tre1.headSet(E toElement, boolean inclusive);
// 返回从fromElement到尾部的子Set,inclusive表示是否包含fromElement,默认为false
tre1.tailSet(E fromElement, boolean inclusive);
// 返回从fromElement到toElement的子Set,inclusive分别表示是否包含起始Element,
// fromIclusive默认为true, toInclusive默认为false,含头不含尾
tre1.headSet(E fromElement, boolean fromInclusive,
E toElement, boolean toInclusive);
LinkedHashSet
LinkedHashSet继承了HashSet,基于LinkedHashMap实现。
- 所有的方法都和HashSet相同
- 底层由LinkedHashMap实现,于是可以记录元素插入时的顺序。