19.HashSet和TreeSet

  1. 19.集合类-HashSet和TreeSet
    1. 19.1 知识点
      1. 回顾Java中集合类关系
      2. HashSet和TreeSet的区别
      3. HashSet和TreeSet的常用方法
      4. TreeSet独有的方法
      5. 总结
    2. 19.2 知识点代码

19.集合类-HashSet和TreeSet


19.1 知识点

回顾Java中集合类关系

// Collection(接口)
//        __________|__________
//       |                     |
//      Set(接口)             List(接口)
//    ___|____            _____|_____
//   |        |          |           |
//HashSet  SortedSet  ArrayList  LinkedList
//            |
//         TreeSet

//Collection接口中的方法
//1.add(E e) 添加元素
//2.remove(Object o) 移除元素
//3.clear() 清空元素
//4.isEmpty() 是否为空
//5.iterator() 获取迭代器,可以用于遍历
//6.size() 集合中元素个数
//7.contains() 判断元素是否存在
//8.toArray() 将容器中元素转为数组

HashSet和TreeSet的区别

//相同点:他们都不允许存储重复的元素,如果传入重复的只会记录一个
//       他们相对上节课的ArrayList和LinkedList最大的使用区别就是他们可以去重
//       都不能像ArrayList和LinkedList通过索引获取或修改元素
//不同点:他们的底层数据结构不同,HashSet底层结构是哈希表,TreeSet底层结构是树
//       TreeSet是有序排列的(会自动将加入元素进行排序),HashSet不一定有序
//       TreeSet相对HashSet由于多继承了接口,所以有更多的方法可以使用

//注意:TreeSet具有排序功能
//     元素是数字时,按照大小升序排列
//     元素是字符串时,按照字符的编码值升序排列
//     元素是自定义类时,可以继承Comparable接口 重载其中的方法
//     特别是compareTo方法,它用于制定排序规则

HashSet和TreeSet的常用方法

//1.初始化
HashSet<Integer> hashSet = new HashSet<>();
TreeSet<Integer> treeSet = new TreeSet<>();

//2.增
treeSet.add(3);
treeSet.add(2);
treeSet.add(1);
treeSet.add(1);
treeSet.add(1);
treeSet.add(1);
treeSet.add(0); // [0, 1, 2, 3],重复元素只保留一个

//3.删
//这两个容器都没有通过索引取移除的重载
treeSet.remove(0); // [1, 2, 3],移除元素0

//4.查
if (treeSet.contains(0)) System.out.println("存在0元素"); // 未执行,0元素已被移除

//5.没有改

//6.遍历
//  只有两种遍历 foreach语句和迭代器
for (Integer i : treeSet)
    System.out.println(i); // 1 2 3

Iterator<Integer> it = treeSet.iterator();
while (it.hasNext()) System.out.println(it.next()); // 1 2 3

TreeSet独有的方法

//1.first() 返回当前第一个元素
System.out.println(treeSet.first()); // 1

//2.pollFirst() 取出当前第一个元素
System.out.println(treeSet.pollFirst()); // 1,取出并移除第一个元素
System.out.println("*********************");
for (Integer i : treeSet)
    System.out.println(i); // 2 3

//3.last() 返回最后一个元素
System.out.println(treeSet.last()); // 3

//4.pollLast() 取出当前最后一个元素
System.out.println(treeSet.pollLast()); // 3,取出并移除最后一个元素
System.out.println("*********************");
for (Integer i : treeSet)
    System.out.println(i); // 2

treeSet.add(1);
treeSet.add(3);
treeSet.add(4);

//5.headSet(E obj) 返回一个新Set集合,新集合是传入对象之前的所有对象
System.out.println("*********************");
SortedSet<Integer> newSet = treeSet.headSet(3);//返回3之前所有对象
for (Integer i : newSet)
    System.out.println(i); // 1 2

//6.subSet(E b, E e) 返回一个新Set集合,新集合是传入对象b 和 e之间的所有对象,左包含,右不包含

//7.tailSet(E obj) 返回一个新Set集合,新集合是传入对象(包含)之后的所有对象
//等等

总结

Set相关集合的特点是
1.不会存储重复元素,如果我们有去重需求可以选择他们
2.只能遍历获取所有元素,不能单独获取中间的某个元素
3.TreeSet会自动排序,可以取出(弹出)首尾


19.2 知识点代码

import java.util.HashSet;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

public class Lesson19_集合类_HashSet和TreeSet
{
    public static void main(String[] args)
    {
        //知识点1:回顾Java中集合类关系
        //              Collection(接口)
        //        __________|__________
        //       |                     |
        //      Set(接口)             List(接口)
        //    ___|____            _____|_____
        //   |        |          |           |
        //HashSet  SortedSet  ArrayList  LinkedList
        //            |
        //         TreeSet

        //Collection接口中的方法
        //1.add(E e) 添加元素
        //2.remove(Object o) 移除元素
        //3.clear() 清空元素
        //4.isEmpty() 是否为空
        //5.iterator() 获取迭代器,可以用于遍历
        //6.size() 集合中元素个数
        //7.contains() 判断元素是否存在
        //8.toArray() 将容器中元素转为数组




        //知识点2:HashSet和TreeSet的区别
        //相同点:他们都不允许存储重复的元素,如果传入重复的只会记录一个
        //       他们相对上节课的ArrayList和LinkedList最大的使用区别就是他们可以去重
        //       都不能像ArrayList和LinkedList通过索引获取或修改元素
        //不同点:他们的底层数据结构不同,HashSet底层结构是哈希表,TreeSet底层结构是树
        //       TreeSet是有序排列的(会自动将加入元素进行排序),HashSet不一定有序
        //       TreeSet相对HashSet由于多继承了接口,所以有更多的方法可以使用

        //注意:TreeSet具有排序功能
        //     元素是数字时,按照大小升序排列
        //     元素是字符串时,按照字符的编码值升序排列
        //     元素是自定义类时,可以继承Comparable接口 重载其中的方法
        //     特别是compareTo方法,它用于制定排序规则




        //知识点3:HashSet和TreeSet的常用方法
        //1.初始化
        HashSet<Integer> hashSet = new HashSet<>();
        TreeSet<Integer> treeSet = new TreeSet<>();
        //2.增
        treeSet.add(3);
        treeSet.add(2);
        treeSet.add(1);
        treeSet.add(1);
        treeSet.add(1);
        treeSet.add(1);
        treeSet.add(0); // [0, 1, 2, 3],重复元素只保留一个
        //3.删
        //这两个容器都没有通过索引取移除的重载
        treeSet.remove(0); // [1, 2, 3],移除元素0
        //4.查
        if (treeSet.contains(0)) System.out.println("存在0元素"); // 未执行,0元素已被移除
        //5.没有改
        //6.遍历
        //  只有两种遍历 foreach语句和迭代器
        for (Integer i : treeSet)
            System.out.println(i); // 1 2 3

        Iterator<Integer> it = treeSet.iterator();
        while (it.hasNext()) System.out.println(it.next()); // 1 2 3



        //知识点4:TreeSet独有的方法
        //1.first() 返回当前第一个元素
        System.out.println(treeSet.first()); // 1
        //2.pollFirst() 取出当前第一个元素
        System.out.println(treeSet.pollFirst()); // 1,取出并移除第一个元素
        System.out.println("*********************");
        for (Integer i : treeSet)
            System.out.println(i); // 2 3
        //3.last() 返回最后一个元素
        System.out.println(treeSet.last()); // 3
        //4.pollLast() 取出当前最后一个元素
        System.out.println(treeSet.pollLast()); // 3,取出并移除最后一个元素
        System.out.println("*********************");
        for (Integer i : treeSet)
            System.out.println(i); // 2

        treeSet.add(1);
        treeSet.add(3);
        treeSet.add(4);
        //5.headSet(E obj) 返回一个新Set集合,新集合是传入对象之前的所有对象
        System.out.println("*********************");
        SortedSet<Integer> newSet = treeSet.headSet(3);//返回3之前所有对象
        for (Integer i : newSet)
            System.out.println(i); // 1 2
        //6.subSet(E b, E e) 返回一个新Set集合,新集合是传入对象b 和 e之间的所有对象,左包含,右不包含
        //7.tailSet(E obj) 返回一个新Set集合,新集合是传入对象(包含)之后的所有对象
        //等等




        //总结
        //Set相关集合的特点是
        // 1.不会存储重复元素,如果我们有去重需求可以选择他们
        // 2.只能遍历获取所有元素,不能单独获取中间的某个元素
        // 3.TreeSet会自动排序,可以取出(弹出)首尾

    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏