
Java-集合框架
Andy_Zheng.
这个作者很懒,什么都没留下…
展开
-
map遍历删除异常:ConcurrentModificationException
一、map集合单个删除此时,一般都不会出问题,直接 remove(key)二、map集合遍历删除多个此时,若不注意往往容易出现问题,出现 ConcurrentModificationException为什么呢?使用iterator迭代删除时没有问题的,在每一次迭代时都会调用hasNext()方法判断是否有下一个,是允许集合中数据增加和减少的。使用forEach删除时,会报错ConcurrentModificationException,因为在forEach遍历时,是不允许map元.原创 2021-04-16 11:15:01 · 2334 阅读 · 0 评论 -
Map 综述(一):彻头彻尾理解 HashMap
摘要: HashMap是Map族中最为常用的一种,也是 Java Collection Framework 的重要成员。本文首先给出了 HashMap 的实质并概述了其与 Map、HashSet 的关系,紧接着给出了 HashMap 在 JDK 中的定义,并结合源码分析了其四种构造方式。最后,通过对 HashMap 的数据结构、实现原理、源码实现三个方面的剖析,深入到它底层 Hash 存储机...转载 2018-07-15 21:58:03 · 222 阅读 · 0 评论 -
Java集合-HashMap的扩容机制
虽然在hashmap的原理里面有这段,但是这个单独拿出来讲rehash或者resize()也是极好的。什么时候扩容:当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值---即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以...转载 2018-07-15 21:00:28 · 6280 阅读 · 0 评论 -
Map 综述(二):彻头彻尾理解 LinkedHashMap
摘要: HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性。比如,LinkedHashMap的元素存取过程基本与HashMap基本...转载 2018-07-15 18:31:17 · 140 阅读 · 0 评论 -
Java集合-ArrayList源码解析(JDK8)
概述正巧最近在看jdk的Collection集合源码,这种单个类的源码解析,写起来还算比较方便。 关键代码处加上注释,核心处做个总结,就可以成文,拿出来和大家讨论分享。 且网上绝大多数都是JDK7甚至之前的源码解析文章。咱们也要与时俱进。 这似乎是我回归博客的一个不错选择。那下面就跟我一起撸起ArrayList的源码吧。本文将从几个常用方法下手,来阅读ArrayList的源码。 按照从构造方法-&...转载 2018-07-14 16:36:18 · 168 阅读 · 0 评论 -
【数据结构】ArrayList原理及实现学习总结
一、ArrayList介绍ArrayList是一种线性数据结构,它的底层是用数组实现的,相当于动态数组。与Java中的数组相比,它的容量能动态增长。类似于C语言中的动态申请内存,动态增长内存。 当创建一个数组的时候,就必须确定它的大小,系统会在内存中开辟一块连续的空间,用来保存数组,因此数组容量固定且无法动态改变。ArrayList在保留数组可以快速查找的优势的基础上,弥补了数组在创建后,要往数组...转载 2018-07-16 11:44:21 · 180 阅读 · 0 评论 -
java集合--PriorityQueue优先级队列使用方法
优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。 PriorityQueue是从JDK1.5开始提供的新的数据结构接口。 如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。 由于网上的资料大多将优先级队列各个方法属性,很少有实例讲解的,为方便大家以后使用,我就写了个dem...转载 2018-07-09 14:23:54 · 1233 阅读 · 0 评论 -
Java中的queue和deque
队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高 相关常用方法: boolean offer(E e):将元素追加到队列末尾,若添加成功则返回true。 E poll():从队首删除并返回该元素。 E peek():返回队首元素,但是不删除 示...转载 2018-07-08 23:25:43 · 260 阅读 · 0 评论 -
Java集合--LinkedList作为栈使用
“栈”通常是指“后进先出”(LIFO)的容器。有时栈也被称为叠加栈,因为最后压入栈的元素第一个弹出栈。LinkedList具有能够实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。示例代码:package com.trs.collection;import java.util.LinkedList;/** * LinkedList具有能够实现栈的所有功能的方法,因此可...原创 2018-07-08 20:40:02 · 5779 阅读 · 3 评论 -
Java集合--LinkedList使用示例
LinkedList也像ArrayList一样实现了基本的List接口,但是它执行某些操作(在List中间插入和删除)时比ArrayList更加高效,但是随即访操作方面却要逊色一些。LinkedList还添加了可以使其用作栈、队列、双端队列的方法示例代码:package com.trs.collection;import java.util.LinkedList;/** * Linke...原创 2018-07-08 20:26:26 · 938 阅读 · 0 评论 -
Java集合--ListIteratory用法
ListIterator是一个更强大的Iterator的子类型,它只能用于各种List类的访问。尽管Iterator只能向前移动,但是ListIterator可以双向移动。它还可以产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引。并且可以用set方法替换它访问过的最后一个元素。你可以通过调用一个listIterator()方法产生一个指向List开始处的ListIterator,并...原创 2018-07-08 20:07:41 · 819 阅读 · 0 评论 -
HashMap实现原理及源码分析
哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录 一、什么是哈希表 二、HashMap实...转载 2018-07-08 12:40:55 · 132 阅读 · 0 评论