Collection类、Vector类、HashSet类....... 2022.6.21

Collections类
*      类的特点
*          针对Collection集合的工具类
*      类的位置
*          java.util
*      类的构造器
*          构造器私有化
*      类的方法
*          public static <T> boolean addAll(Collection<? super T> c,T... elements)
*              将所有指定元素添加到指定 collection 中。
*          public static void reverse(List<?> list)
*              反转指定列表中元素的顺序。
*          public static void shuffle(List<?> list)
*              使用默认随机源对指定列表进行置换。
*          public static <T extends Comparable<? super T>> void sort(List<T> list)
*              根据元素的自然顺序 对指定列表按升序进行排序。
*          public static <T> void sort(List<T> list,Comparator<? super T> c)
*              根据指定比较器产生的顺序对指定列表进行排序

Vector类
*      类的特点
*          1.Vector集合底层数据结构是数组结构
*          2.Vector集合可以存储null元素,在使用Vector集合元素之前,先针对元素进行非空校验,防止空指针异常
*          3.Vector集合是线程安全的集合,只适用于多线程程序,如果在单线程中进行使用,执行效率低
*          4.Vector集合是有序的集合
*              有序集合:存储元素的顺序和获取元素的顺序是一致的
*          5.Vector集合是含有索引集合
*          6.Vector集合可以存储重复元素
*          7.Vector集合适用于List集合的6种遍历方式
*      类的位置
*          java.util
*      类的构造器
*          public Vector()
*              构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
*      类的方法
*          详见Collection接口和List接口常用方法

ArrayList集合和Vector集合的区别
*      1.线程安全性:
*          ArrayList集合:ArrayList集合是线程不安全的集合,只适用于单线程程序,如果在多线程中进行使用,需要手动添加线程安全
*          Vector集合:Vector集合是线程安全的集合,只适用于多线程程序,如果在单线程中进行使用,执行效率低
*      2.无参构造器底层的初始容量
*          ArrayList集合:
*              JDK6.0(包含)以前:
*                  初始容量:10
*              JDK7.0(包含)以后:
*                  初始容量:0
*          Vector集合:
*              初始容量:10
*      3.底层数组影响扩容的因素不同
*          ArrayList集合:是否为第一次扩容
*          Vector集合:增量参数是否大于0
*      4.底层数组的扩容规则不同
*          ArrayList集合:
*              JDK6.0(包含)以前:
*                  扩容原理:(原来数组长度 * 3)/2 + 1;
*              JDK7.0(包含)以后:
*                  扩容原理:
*                      第一次添加元素时:
*                          扩容原理:10
*                      后续添加元素时:
*                          原来数组长度 + (原来数组长度 >> 1);
*          Vector集合:
*              当增量参数 > 0:
*                  扩容原理:
*                      原来数组长度 + 增量参数;
*              当增量参数 <= 0;
*                  扩容原理:
*                      原来数组长度 + 原来数组长度;

LinkedList类
*      类的特点
*          1.LinkedList集合底层的数据结构为"链接列表结构",并且是一个"双向链接列表结构"
*          2.LinkedList集合可以存储null元素,在使用集合中元素之前需要进行非空校验,防止空指针异常
*          3.LinkedList集合不是线程安全的,适用于单线程程序,如果在多线程中进行使用,需要手动添加线程安全
*          4.LinkedList集合是有序的集合
*              有序集合:存储元素的顺序和获取元素的顺序是一致的
*          5.LinkedList集合是含有索引集合
*          6.LinkedList集合可以存储重复元素
*          7.LinkedList集合适用于List集合的6种遍历方式
*      类的位置
*          java.util
*      类的构造器
*          public LinkedList()
*              构造一个空列表。
*      类的方法
*          public void addFirst(E e)
*              将指定元素插入此列表的开头。
*          public void addLast(E e)
*              将指定元素添加到此列表的结尾。
*          public E getFirst()
*              返回此列表的第一个元素。
*          public E getLast()
*              返回此列表的最后一个元素。
*          public E removeFirst()
*              移除并返回此列表的第一个元素。
*          public E removeLast()
*              移除并返回此列表的最后一个元素。


Set接口
*      接口的特点
*          1.Set接口下所有集合不可以存储重复元素
*          2.Set接口下所有集合既有有序的集合,也有无序的集合
*          3.Set接口下所有集合没有索引
*          4.Set即可下所有集合只有4种遍历方式
*              详见Collection集合的遍历方式
*      接口的位置
*          java.util
*      接口的方法
*          详见Collection接口的常用方法

HashSet类
*      类的特点
*          1.HashSet集合底层封装一个HashMap实例
*              HashMap集合底层的数据结构:哈希表
*                  JDK7.0(包含)以前:
*                      存储链接列表对象的数组
*                  JDK8.0(包含)以后
*                      存储链接列表对象或红黑树对象的数组
*          2.HashSet集合是无序的集合
*          3.HashSet集合无法保证元素在集合中的顺序永远不会改变
*              原因:元素的存储顺序和底层数组的长度有关,一旦数组发生扩容或缩减元素的位置有可能发生变化
*          4.HashSet集合可以存储null元素,使用集合元素时,需要进行非空校验,防止空指针异常
*          5.HashSet集合是线程不安全的,适用于单线程程序,如果在多线程中进行使用,需要手动添加线程安全
*      类的位置
*          java.util
*      类的构造器
*          public HashSet()
*              构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75。
*      类的方法
*          详见Collection接口的常用方法

HashSet集合如何过滤重复元素
*      1.HashSet集合过滤重复元素和地址值无关
*      2.HashSet集合过程重复元素和hashCode()有关,重写Object类的hashCode()
*      3.HashSet集合过程重复元素和equals()有关,重写Object类的equals()

* 重写hashCode()时重要参数为什么是31?
*      1.为了减少hashCode值的重复概率,这个数必须是质数
*      2.这个数不宜过小(原因:过小增大重复概率)
*      3.这个数不宜过大(原因:过大会有可能超出int范围,造成数据的精度的损失,增大重复概率)
*      4.通过"泊松分布"计算出数字29和31是较为合适的数字
*      5.通过数学科学计数法的改写,29可以写成2^5-3,31可以写成2^5-1,31的格式和整数取值范围相似或者二进制满位原因,最终选择31


LinkedHashSet类
*      类的特点
*          1.LinkedHashSet集合是有序的集合
*          2.LinkedHashSet集合底层的数据结构是"哈希表 + 链表"
*              链表:维护着LinkedHashSet集合有序
*          3.LinkedHashSet集合可以存储null元素,使用集合元素时,需要进行非空校验,防止空指针异常
*          4.LinkedHashSet集合是线程不安全的,适用于单线程程序,如果在多线程中进行使用,需要手动添加线程安全
*      类的位置
*          java.util
*      类的构造器
*          public LinkedHashSet()
*              构造一个带默认初始容量 (16) 和加载因子 (0.75) 的新空链接哈希 set。
*      类的方法
*          详见Collection接口的常用方法

红黑树数据结构:
*      含义:
*          带有红结点和黑结点的二叉树结构,其实也是程序中比较特殊的类
*      特点:
*          1.查询效率高,增删效率高
*          2.结点对象可以根据int数据进行大小排序
*      设计:
*          当前元素(泛型)
*          父结点对象(结点对象类型)
*          子左结点对象(结点对象类型)
*          子右结点对象(结点对象类型)
*          颜色属性(boolean)
*      注意:
*          红黑树数据结构适用于数据量较多时候,不适合少量数据
*          红黑树数据结构中的每个结点比较数据必须落实在"int类型"

TreeSet类
*      类的特点
*          1.TreeSet集合底层的数据结构"红黑树"
*          2.使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序
*          3.TreeSet集合是无序的集合,存储元素顺序和获取顺序不一致
*          4.TreeSet集合不可以存储null元素,添加元素时需要针对每个待添加元素进行非空校验,防止空指针异常
*          5.TreeSet集合是线程不安全的集合,适用于单线程程序,如果在多线程中进行使用,需要手动添加线程安全
*      类的位置
*          java.util
*      类的构造器
*          public TreeSet()
*              构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。
*          public TreeSet(Comparator<? super E> comparator)
*              构造一个新的空 TreeSet,它根据指定比较器进行排序。
*      类的方法
*          详见Collection集合的常用方法
*      注意事项:
*          针对TreeSet中元素类型必须定义比较器(手动编写比较规则)
*          自然顺序比较器
*              实现Comparable<T>接口,重写compareTo(T o)
*          定制顺序比较器
*              实现Comparator<T>接口,重写int compare(T o1,T o2)

自然顺序比较器
*      实现Comparable<T>接口,重写compareTo(T o)
*
* 步骤:
*      1.TreeSet集合元素的类型实现Comparable<T>接口
*      2.TreeSet集合元素的类型中重写Comparable<T>接口的compareTo(T o),指定比较规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值