java数据结构之有序集合TreeSet和普通集合HashSet的使用

集合元素与数组,还有列表(ArrayList)最大的区别就是,集合中不存在重复的元素,它天然具有去重性。

一、普通集合HashSet

1.HashSet与其他数据集合的关系

HashSet与其他数据集合的关系

2.HashSet包含的主要方法

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. //1.通过默认的容量来初始化
  2. Set<Integer> articleIdSet = new HashSet<Integer>();
  3. articleIdSet.add(1008);
  4. articleIdSet.add(1003);
  5. articleIdSet.add(1005);
  6. System.out.println(articleIdSet); //[1008, 1003, 1005]
  7. //2.通过另外一个集合对象来初始化
  8. List<Integer> userList = new ArrayList<Integer>(5);
  9. userList.add(1008);
  10. userList.add(1009);
  11. userList.add(1008);
  12. System.out.println(userList); //[1008, 1009, 1008]
  13. Set<Integer> userSet = new HashSet<Integer>(userList);
  14. System.out.println(userSet); //[1008, 1009]
5.添加元素方法add
  • add(E e):添加元素e
  1. Set<Integer> userSet = new HashSet<Integer>();
  2. userSet.add(152);
  • 添加多个元素时,可以使用addAll
6.删除元素方法remove
  • remove(Object o):删除元素o
  1. Set<Integer> userSet = new HashSet<Integer>();
  2. userSet.add(1008);
  3. userSet.add(1009);
  4. System.out.println(userSet); //[1008, 1009]
  5. userSet.remove(1008);
  6. System.out.println(userSet); //[1009]
  • 添加多个元素时,可以使用removeAll

二、有序集合TreeSet

TreeSet与HashSet最大的不同是TreeSet每个元素是有序的

1.TreeSet与其他数据集合的关系

TreeSet与其他数据集合的关系

2.HashSet包含的主要方法

TreeSet包含的主要方法

3.TreeSet的初始化
  • new TreeSet():不指定元素和比较器对象
  • new TreeSet(NavigableMap m):通过一个NavigableMap对象实例化
  • new TreeSet(SortedSet s):通过一个SortedSet对象实例化
  • new TreeSet(Comparator comparator):通过一个比较器对象来实例化
  • new TreeSet(Collection c):通过另外一个集合来初始化
  1. //1.通过默认参数进行初始化
  2. Set<Integer> score = new TreeSet<Integer>();
  3. score.add(99);
  4. score.add(98);
  5. score.add(100);
  6. System.out.println(score); //[98, 99, 100]
4.添加元素方法add
  • add(E e):添加元素e
  1. Set<Integer> userSet = new TreeSet<Integer>();
  2. userSet.add(152);
  • 添加多个元素时,可以使用addAll
5.删除元素方法remove
  • remove(Object o):删除元素o
  1. Set<Integer> userSet = new TreeSet<Integer>();
  2. userSet.add(1009);
  3. userSet.add(1008);
  4. System.out.println(userSet); //[1008, 1009]
  5. userSet.remove(1008);
  6. System.out.println(userSet); //[1009]
  • 添加多个元素时,可以使用removeAll
6.获取集合中的部分元素subSet

和List中的subList比较相似

  • subSet(fromElement, fromInclusive, toElement, toInclusive)
    • fromElement:起始元素(是元素值,不是索引)
    • fromInclusive :是否包含起始元素在内
    • toElement:终止元素
    • toInclusive:是否包含终止元素
  1. TreeSet<Integer> score = new TreeSet<Integer>();
  2. score.add(99);
  3. score.add(98);
  4. score.add(100);
  5. score.add(58);
  6. score.add(69);
  7. score.add(72);
  8. score.add(87);
  9. System.out.println(score); //[58, 69, 72, 87, 98, 99, 100]
  10. System.out.println(score.subSet(50, true, 80, true)); //[58, 69, 72]
  11. System.out.println(score.subSet(58, false, 80, true)); //[69, 72]
7.获取从某个起始元素开始的到指定元素的子集headSet

是subSet方法的一部分:

headSet(toElement)

  • toElement:从开始到toElement结束的元素集合
  1. System.out.println(score.headSet(90)); //[58, 69, 72, 87]
8.获取从某个元素开始到最后一个元素的子集tailSet

tailSet(fromElement)

  • fromElement:起始元素
  1. System.out.println(score.tailSet(60)); //[69, 72, 87, 98, 99, 100]
9.获取第一个元素first和最后一个元素last
  1. System.out.println(score.first()); //第一个元素:58
  2. System.out.println(score.last()); //100