集合元素与数组,还有列表(ArrayList)最大的区别就是,集合中不存在重复的元素,它天然具有去重性。
一、普通集合HashSet
1.HashSet与其他数据集合的关系
2.HashSet包含的主要方法
3.HashSet的存储
- HashSet的底层是存储在一个HashMap中的
- 各元素为HashMap的键,值为一个固定的空对象
注:为什么不用数组来存储数据元素呢?
- 因为集合的元素是不可重复的,用数组来存储,去重是一个比较麻烦的事情,通过HashMap的键来保证唯一性,是非常快捷的
4.初始化HashSet
- new HashSet():
- new HashSet(int capacity):指定初始化容量
- new HashSet(int capacity, float loadFactor):通过一个初始容量和负载因子来初始化
- new HashSet(Collection c):通过一个集合对象来初始化
//1.通过默认的容量来初始化
Set<Integer> articleIdSet = new HashSet<Integer>();
articleIdSet.add(1008);
articleIdSet.add(1003);
articleIdSet.add(1005);
System.out.println(articleIdSet); //[1008, 1003, 1005]
//2.通过另外一个集合对象来初始化
List<Integer> userList = new ArrayList<Integer>(5);
userList.add(1008);
userList.add(1009);
userList.add(1008);
System.out.println(userList); //[1008, 1009, 1008]
Set<Integer> userSet = new HashSet<Integer>(userList);
System.out.println(userSet); //[1008, 1009]
5.添加元素方法add
- add(E e):添加元素e
Set<Integer> userSet = new HashSet<Integer>();
userSet.add(152);
- 添加多个元素时,可以使用addAll
6.删除元素方法remove
- remove(Object o):删除元素o
Set<Integer> userSet = new HashSet<Integer>();
userSet.add(1008);
userSet.add(1009);
System.out.println(userSet); //[1008, 1009]
userSet.remove(1008);
System.out.println(userSet); //[1009]
- 添加多个元素时,可以使用removeAll
二、有序集合TreeSet
TreeSet与HashSet最大的不同是TreeSet每个元素是有序的
1.TreeSet与其他数据集合的关系
2.HashSet包含的主要方法
3.TreeSet的初始化
- new TreeSet():不指定元素和比较器对象
- new TreeSet(NavigableMap
m):通过一个NavigableMap对象实例化 - new TreeSet(SortedSet
s):通过一个SortedSet对象实例化 - new TreeSet(Comparator comparator):通过一个比较器对象来实例化
- new TreeSet(Collection c):通过另外一个集合来初始化
//1.通过默认参数进行初始化
Set<Integer> score = new TreeSet<Integer>();
score.add(99);
score.add(98);
score.add(100);
System.out.println(score); //[98, 99, 100]
4.添加元素方法add
- add(E e):添加元素e
Set<Integer> userSet = new TreeSet<Integer>();
userSet.add(152);
- 添加多个元素时,可以使用addAll
5.删除元素方法remove
- remove(Object o):删除元素o
Set<Integer> userSet = new TreeSet<Integer>();
userSet.add(1009);
userSet.add(1008);
System.out.println(userSet); //[1008, 1009]
userSet.remove(1008);
System.out.println(userSet); //[1009]
- 添加多个元素时,可以使用removeAll
6.获取集合中的部分元素subSet
和List中的subList比较相似
- subSet(fromElement, fromInclusive, toElement, toInclusive)
- fromElement:起始元素(是元素值,不是索引)
- fromInclusive :是否包含起始元素在内
- toElement:终止元素
- toInclusive:是否包含终止元素
TreeSet<Integer> score = new TreeSet<Integer>();
score.add(99);
score.add(98);
score.add(100);
score.add(58);
score.add(69);
score.add(72);
score.add(87);
System.out.println(score); //[58, 69, 72, 87, 98, 99, 100]
System.out.println(score.subSet(50, true, 80, true)); //[58, 69, 72]
System.out.println(score.subSet(58, false, 80, true)); //[69, 72]
7.获取从某个起始元素开始的到指定元素的子集headSet
是subSet方法的一部分:
headSet(toElement)
- toElement:从开始到toElement结束的元素集合
System.out.println(score.headSet(90)); //[58, 69, 72, 87]
8.获取从某个元素开始到最后一个元素的子集tailSet
tailSet(fromElement)
- fromElement:起始元素
System.out.println(score.tailSet(60)); //[69, 72, 87, 98, 99, 100]
9.获取第一个元素first和最后一个元素last
System.out.println(score.first()); //第一个元素:58
System.out.println(score.last()); //100