![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
集合
文章平均质量分 53
Mudrock__
这个作者很懒,什么都没留下…
展开
-
集合_TreeSet\TreeMap与排序机制简述
TreeMap以k-v键值对的形式存储数据,存储的方式为红黑树TreeMap的key值不允许重复,不允许为null;value允许重复,允许为null;key值发生重复时,进行value替换TreeMap的key值重复与否的依据,在于通过构造函数传入的Comparator的compare方法,或key值所属类型重写的Comparable接口的compareTo方法,前者的优先级高于后者进行验证return 0;});}}int id;id = i;原创 2022-09-23 02:04:12 · 426 阅读 · 0 评论 -
集合_HashTable与HashMap
HashTable中的table数组存放的数据类型为HashTable.Entry 默认容量为11 默认临界值为11*0.75=8。HashMap中的table数组存放的数据类型为HashMap.Node 默认容量为16 默认临界值为16*0.75=12。1.若oldCapacity == MAX_ARRAY_SIZE 则return oldCapacity。2.否则newCapacity = MAX_ARRAY_SIZE。HashTable出现于1.0版本 HashMap出现于1.2版本。原创 2022-09-22 16:17:48 · 244 阅读 · 1 评论 -
集合_Map接口常用方法
put 添加元素remove 依key删除元素get 依key获取valuesize 获取元素个数isEmpty 判断集合是否为空clear 清空集合中的元素containsKey 判断key是否存在containsValue 判断value是否存在。原创 2022-09-21 22:02:12 · 120 阅读 · 0 评论 -
集合_遍历HashMap
另外,通过entrySet方法获取的数据类型为实现了Map.Entry接口的HashMap.Node类,getKey、getValue、setValue等方法均系HashMap.Node类重写。遍历方式主要有两种,迭代器与增强for循环(底层使用迭代器实现)若想遍历HashMap中的元素,需要用到。1.entrySet方法用于获取键值对。2.keySet方法用于获取键。3.values方法用于获取值。原创 2022-09-21 20:54:54 · 191 阅读 · 0 评论 -
集合_Collection_LinkedHashSet简述
LinkedHashMap中重写了newNode方法,让该方法在返回一个新建结点的同时,调用linkNodeLast方法(newNode方法在HashMap的putVal方法中被调用,putVal方法在put方法中被调用,put方法在HashSet的add方法中被调用)接下来进行判断,新尾结点p是table数组中的第一个元素时,将head与tail一同指向p,否则进行链表链接:将新尾结点p的before属性指向旧尾结点last,将旧尾结点last的after属性指向新尾结点p。next属性指向下一结点。原创 2022-09-20 20:28:11 · 351 阅读 · 0 评论 -
集合_HashMap_初始容量为什么是2的n次方数
而恰好2^n - 1的数值位全为1,同时hash & 2^n - 1的取值范围为[0,2^n - 1],符合索引范围。显然hash & 数值位全为1的数,得到的索引分布最均匀,因为1 & 任何数等于任何数本身。hash & 2^n - 1的取值范围为[0,2^n - 1],可能会发生数组下标越界。HashMap决定元素所属索引的散列算法是hash & (length - 1)HashMap的散列算法目的是为了得到均匀分布的小于length的索引。问:为什么不直接将2^n - 1作为容量?原创 2022-09-20 10:59:36 · 126 阅读 · 0 评论 -
集合_HashMap_tableSizeFor
结论:返回大于或等于参数的最小2的n次方数。原创 2022-09-19 18:07:14 · 218 阅读 · 0 评论 -
集合_HashSet(HashMap)扩容机制源码简析
因为HashSet的构造方法,本质上都是调用HashMap的构造方法,对其内部维护的HashMap对象map进行初始化众所周知HashMap的存储方式为K-V键值对,而HashSet的存储方式从表面上来看为仅存储key,其原因是HashSet中存在PRESENT属性,该属性为Object类型,其作用为:作为K-V键值对中的value。所以实际上HashSet的存储方式也为K-V键值对,但value恒为PRESENT(通过HashMap实现,必然是存储键值对的)原创 2022-09-19 18:10:49 · 443 阅读 · 0 评论 -
集合_Collection_HashSet(HashMap)简述
继承自Set 或者说Collection(与List不同的是 List中新增了许多关于index的方法)无序 无重复 无索引无序是指元素取出时的顺序与添加时的顺序不一致 但取出的顺序是固定的(顺序取决于元素hash后的结果)无重复是指无法在集合中存放重复的元素无索引是指无法通过索引获取或操作集合中的元素HashMap 而HashMap的底层是 数组 + 单向链表(提高存取效率) + 红黑树(在链表达到一定长度之后会被替换为红黑树 红黑树可以提高检索效率)。原创 2022-09-17 16:02:09 · 360 阅读 · 0 评论 -
集合_Collection_LinkedList简述及增删机制源码简析
关于LinkedList的简单总结:LinkedList底层维护了一个双向链表LinkedList中维护了三个属性:first与last与sizefirst指向首节点last指向尾结点size表示集合中的元素个数每个节点(Node)对象中维护了prev、next、item三个属性prev指向前一个节点next指向后一个节点item存放数据关于元素:LinkedList可以添加任意元素(包括null) 且元素可重复。原创 2022-09-16 20:34:37 · 368 阅读 · 0 评论 -
集合_Collection_Vector简述及扩容机制源码简析
总结:01.Vector底层为Object数组 elementData (protected Object[] elementData;)02.Vector是线程安全的 Vector类的操作方法带有synchronized03.若使用无参构造创建集合 则elementData容量为10 因为无参构造器内部调用单参数的有参构造 且参数(初始容量)为10 扩容时将扩容为先前的容量的2倍04.若使用有参构造创建集合 则elementData容量由参数指定 扩容时将扩容为先前容量的2倍。原创 2022-09-15 20:45:54 · 143 阅读 · 0 评论 -
集合_Collection_ArrayList简述及扩容机制源码简析
Arrays.copyOf方法将返回一个新的数组,即扩容后的数组实际上和扩容前的数组不是同一个数组,但Arrays.copyOf方法会保留扩容前的数组中的元素,并在扩容的部分填入null。注:oldCapacity + (oldCapacity >> 1)即为oldCapacity + oldCapacity/2,该代码决定了大部分的扩容,扩容后的数组容量为扩容前的1.5倍(存在0-10、0-1、1-2的特殊情况)注:该方法决定了,集合若为无参构造创建,则第一次扩容将被扩容为10。原创 2022-09-15 12:04:03 · 216 阅读 · 0 评论 -
集合_Collection_List接口简单排序
集合_Collection_List接口简单排序原创 2022-09-14 16:31:50 · 118 阅读 · 0 评论 -
集合_Collection_List接口常用方法
获取从fromIndex至toIndex的元素构成的子集合(前闭后开 即 [) )获取指定元素最后一次出现位置的下标。获取指定元素第一次出现位置的下标。将指定下标的元素替换为指定元素。原创 2022-09-14 12:17:32 · 112 阅读 · 0 评论 -
集合_Collection_Iterator迭代器
02.退出while循环后 迭代器指向集合中最后一个元素 此时调用iterator.next()将抛出NoSuchElementException异常(若想重新进行迭代 可重置迭代器 即对迭代器重新调用iterator()方法)01.调用next()之前 需要先调用hasNext() 否则若无下一个元素 会抛出NoSuchElementException异常。next(): 指针下移 并返回移动后的位置的元素(可以理解为初始index = -1)hasNext(): 判断是否还存在下一个元素。原创 2022-09-10 11:07:50 · 303 阅读 · 0 评论 -
集合_Collection/Map关系图示
Collection/Map关系图示原创 2022-09-10 10:31:12 · 130 阅读 · 0 评论 -
集合_Collection_Collection接口常用方法
containsAll 查找多个元素是否都存在。contains 查找元素是否存在。add 添加单个元素。remove 删除指定元素。size 获取元素个数。isEmpty 判断是否为空。addAll 添加多个元素。removeAll 删除多个元素。clear 清空。原创 2022-09-10 10:17:03 · 140 阅读 · 0 评论