Java集合
ddou_pan
这个作者很懒,什么都没留下…
展开
-
Java集合ArrayList的迭代器
返回迭代器的函数1. public ListIterator<E> listIterator(int index)2. public ListIterator<E> listIterator()3. public Iteraotr<E> iterator()前两个函数返回针对ArrayList的迭代器,而第三个函数返回一个迭代器的基类对象。...原创 2019-06-08 16:18:33 · 525 阅读 · 0 评论 -
java集合HashMap中链表树化的条件
在HashMap具体实现类中,有两个变量:第一个变量是链表树化的阈值,在每次插入操作时,会检查链表中元素的个数是否达到阈值,达到阈值以后才会进行树化操作。而进行树化操作的第一个判断就是哈希数组的容量是否大于MIN_TREEIFY_CAPACITY,如果小于,进行扩容操作,而不是树化操作。代码片段如下:综上:哈希表的链表树化成红黑树有 两个条件:1. 链表长...原创 2019-08-05 20:21:48 · 4250 阅读 · 4 评论 -
Java集合HashMap的put操作
Java中HashMap的实现并不是简单的开链法,而是在开链法的基础上加上了搜索树的方法。默认负载因子:0.75默认数组大小:16上述两个参数都可以利用构造参数提供自定义的容量和负载因子,需要注意的是如果自定义容量,容量会提升到2的幂次,不一定是自定义的大小。扩容操作: 数组扩展为原来的2倍的容量,原来位置的元素要么还在原来的位置,要么在2倍偏移的位置。put()操作:利用ha...原创 2019-08-04 13:05:47 · 523 阅读 · 0 评论 -
Java中ArrayDeque的实现
ArrayDeque采用循环数组的形式实现。ArrayDeque提供了三个构造函数。1. 无参构造器:申请大小为16的数组2. 提供需要空间大小的有参构造器:利用allocateElements申请空间3. 利用现有集合的有参构造器:同样利用allocateElements申请空间,再将现有集合中的元素拷贝到数组中allocateElements(int numEl...原创 2019-06-16 17:27:36 · 545 阅读 · 0 评论 -
Java中PriorityQueue相关
优先队列:依靠堆数据结构来实现,因为堆又是完全二叉树,采用数组来存储,父子关系依靠下标来维系。Java中,如果调用无参构造函数,默认生成一个能够容纳11个元素的数组,如果不指定比较器,按照小根堆来排列。扩容操作:PriorityQueue的扩容选择和ArrayList(扩大到原来容量的1.5倍),Vector(默认扩容到原容量的2倍,如果指定了扩容大小,就扩容指定大小)的策略都不同,Pri...原创 2019-06-09 16:01:22 · 127 阅读 · 0 评论 -
Java集合实现类中的变量modCount
在Java集合的实现中,有一个modCount变量,这个变量在ArrayList中提供了比较详细的解释:简单来说,就是这个变量表示了列表结构性改变的次数,结构性改变指的是列表大小发生变化,或者是其他方式改变列表内容,可能导致在遍历列表过程中得到错误的结果。这个变量被iterator对象和list iterator对象使用(这两个对象在iterator()方法和listIterator(...原创 2019-06-09 09:28:24 · 392 阅读 · 0 评论 -
Java中Stack类相关
Java中Stack类是借助Vector类实现的,具体来说是继承Vector类:Stack类在Vector类的基础上提供了在Vector尾端进行操作的函数:push(), pop(), peek(), empty(), search()特殊地:search函数对栈中元素进行搜索,栈顶元素是位置1,向下递增。但是因为Stack类是继承Vector类的,所以Stack对象也能够使用Ve...原创 2019-06-08 23:20:52 · 306 阅读 · 0 评论 -
Java中Vector和ArrayList的不同
1. Vector中方法都用synchronized关键字修饰,线程安全2. 使用ArrayList时,如果不指定大小,会生成一个空的数组; 使用Vector时,如果不指定大小,会默认生成一个10个元素大小的数组2. Vector 实现类中有一个变量 capacityIncrement 用来表示每次容量自增时应该增加多少,如果不指定,默认为0在扩容时,会判断,如果指定了cap...原创 2019-06-08 20:24:50 · 640 阅读 · 0 评论 -
Java中LinkedList的迭代器
类似于ArrayList的迭代器,LinkedList的迭代器采用三个成员变量:lastReturned, next, nextIndex.所有的操作都是在lastReturned指向的节点上进行操作,next指向下一个节点。不论是通过有参还是无参的构造函数获得容器的迭代器,初始情况下lastReturned都被设置为null。要通过迭代器进行容器元素的修改时,必须先调用next()方...原创 2019-06-08 19:45:12 · 1878 阅读 · 0 评论 -
Java中LinkedList容器
Java中LinkedList容器是以双向链表形式(头节点的前驱为null, 尾节点的后继为null)实现的,以便于快速的插入和删除元素。三个核心的成员变量:size:链表中节点个数,first:链表头节点, last: 链表尾节点操作都是在遍历的基础上进行节点指针的调整。例如:根据索引返回对象的函数 node(int index)会先判断索引值在整个链表的中间靠前还是靠后,靠前就...原创 2019-06-08 18:27:12 · 176 阅读 · 0 评论 -
Java集合中HashSet的实现
通过查看HashSet的源码可以看到,HashSet是在HashMap上做了一层封装,HashSet的所有方法都是通过调用HashMap的相应方法实现的,但是在对外表现上,HashMap和HashSet还是有不同的,HashMap存储的是key-value对,而HashSet中存储的单一的value,那么在通过调用HashMap实现时还是要做一些处理。下面是实现源码的一些片段:声明一个...原创 2019-08-05 20:45:00 · 182 阅读 · 0 评论