
Java集合
文章平均质量分 84
Java编程小辉
两年半Java开发经验,24届毕业生
GitHub:https://github.com/qiuquanhui 正在求职找工作中
展开
-
HashMap源码解析
因此 n - 1 就是二进制低位全是1,跟 hashCode 相与的话会将左边的哈希值的高位全抹掉,剩下的就是余数了,因此相当于 HashCode % n, 两者的结果是一样的,但使用 HashCode & (n - 1)是位运算,执行在硬件层,效率比直接求余要高。扩容机制:HashMap 的默认容量为 16 ,负载因子为 0.75,当集合中的元素超过容量与负载因子的乘积时,会引发扩容机制。树化的过程,两个条件:1.hashmap 的容量要大于等于 64 并且 链表的长度要大于等于 8 ,才能实现树化。原创 2024-06-11 16:46:39 · 628 阅读 · 0 评论 -
ArrayList源码解析
ArrayList:是基于数组实现的集合列表,它被称为动态数组,因为相比与数组的固定大小,ArrayList 当添加元素时,添加的元素数量大于数组的容量的话就会触发扩容机制。ArrayList 是线程不安全的,如果要实现线程安全,可以使用 CopyOnWriteArrayList,或者用 Collections 工具类封装。每次通过右移的方法扩容 1.5 倍,最后将旧数组的元素复制到新数组中。数组的移除是通过覆盖的方式完成,将该元素后面的值往前覆盖。很简单,直接根据下标设置数组的元素。原创 2024-06-11 14:59:09 · 420 阅读 · 0 评论 -
HashMap一文搞定
HashMap 是 Java 中一种非常常用的基于散列的映射数据结构,它实现了 Map 接口。HashMap 可以存储键值对(key-value pairs),其中每个键都是唯一的,用于映射到特定的值。HashMap 允许使用null 值和 null键。这种数据结构是非同步的,意味着它不是线程安全的。如果多个线程同时访问一个 HashMap,并且至少有一个线程从结构上修改了映射,它必须保持外部同步。原创 2024-03-22 20:48:12 · 981 阅读 · 0 评论 -
HashSet一文搞定
会进行扩容操作,即创建一个新的元素数组,其容量是原数组的两倍,并将所有旧元素重新映射到新数组中。每个桶的初始状态是空的,当冲突发生时(即两个元素的哈希码映射到同一个桶),查找元素时,也是先计算元素的哈希值,然后定位到对应的桶。的值则使用一个固定的、不变的对象来代表(通常是一个预定义的私有静态对象,不对外公开,仅用于内部标识)。是基于哈希表的,因此它的性能受到哈希函数的影响。这个类允许存储的元素为。不保证元素的顺序,元素在集合中的位置可能与添加进集合的顺序不同。接口的性质,它是集合的一种,不允许元素重复。原创 2024-03-21 20:44:33 · 968 阅读 · 0 评论 -
ArrayList一文搞定
的中间或开始位置插入或删除元素的效率较低,因为这需要移动插入点之后(或删除点之前)的所有元素来保持元素的连续性。在很多场景下都非常有用,但是它也有一些局限性,比如在列表中间插入和删除元素的性能较低,以及它不是线程安全的。可以作为实现其他数据结构的基础,比如栈、队列和其他复合结构,因为它提供了灵活的动态数组实现和快速的随机访问能力。会自动进行扩容,通常是将当前数组的大小增加到原来的1.5倍,然后将原数组的元素复制到新数组中。: 将指定集合中的所有元素添加到列表的尾部,按照指定集合的迭代器返回它们的顺序。原创 2024-03-21 20:42:59 · 598 阅读 · 0 评论