Java集合框架
Coder米
:)
展开
-
hashMap的3种遍历方式
HashMap3种遍历方式1. 通过键值对遍历:先将hashMap实例转化为set实例(类型为map.entry<>), Iterator<Map.Entry<Integer, Integer>> iterator = hashMap.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<Integer, Integer> next = iterato原创 2021-09-04 13:03:39 · 571 阅读 · 0 评论 -
ConcurrentHashMap的扩容方法详解
一、ConcurrentHashMap扩容(jdk1.7)扩容只针对ConcurrentHashMap中的hashEntry类型的table数组进行扩容。方法在Segment类中:rehash() , 扩容倍数为:2倍扩容源码解析: private void rehash(HashEntry<K,V> node) { //先将需要扩容的table数组进行拷贝 ...原创 2019-04-27 00:17:02 · 9545 阅读 · 4 评论 -
源码剖析ConcurrentHashMap及ConcurrentHashMap和HashMap、HashTable的区别
一、ConcurrentHashMapjdk1.7源码分析ConcurrentHashMap:(在源码中可以看到自jdk1.5开始引入ConcurrentHashMap)ConcurrentHashMap是对HashMap线程不安全的优化,使其线程安全且高效。下面对源码的一些内容做以分析:1、继承关系(jdk1.5开始)继承了AbstractMap、实现了ConcurrentMap和序列...原创 2019-04-26 10:38:05 · 694 阅读 · 0 评论 -
HashMap和HashTable的异同点
相同点: 1.底层数据结构相同,都为数组+链表 2.key都不能重复 3.插入元素不能保证有序 4.都是通过key进行哈希不同点: 1.安全性问题 HashTable中的方法都有Synchronized修饰,线程安全:在多线程访问情况下, 2.继承关系: hashMap继承AbstractMap hashTable继承Dicti...原创 2019-04-25 21:34:43 · 493 阅读 · 0 评论 -
HashTable源码1.7详解
一、HashTable1.特点 键值都不能为空(否则会抛异常) key不能重复 元素插入无序2. 常用方法介绍 synchronized int size() //元素总个数 synchronized boolean isEmpty() //判断hashTable是否为空 synchronizedboolean contains(Object value) //判断是否包...原创 2019-04-25 21:32:36 · 239 阅读 · 0 评论 -
Map接口、HashMap源码详解
一、Map接口从集合框架图来看:Map为collection的子接口,以key-value键值对的形式存储数据数据结构: 哈希表哈希表:通过关键码来映射到一个值的数据结构哈希函数:键与值映射的一个映射关系 (哈希函数的具体方法(第9个))二、HashMap1、特点: 数据插入无序 值可以重复,键不能重复 键可以为null2、常用方法介绍...原创 2019-04-25 21:05:05 · 161 阅读 · 0 评论 -
IntelliJIDEA设置生成序列化ID
实现Serializable接口点击类名,按住键盘Alt+Insert,没有设置,则不会出现序列化ID的选项,设置:点击File→Settings…点击图中的Java在其中找到Serialization issues这一项勾选这一项:Serializable class without ‘serialVersionUID’,点击Apply,OK重启IDEA,鼠标放在类名处,按...原创 2019-04-11 21:10:44 · 3074 阅读 · 0 评论 -
梳理一下Java集合框架库重要的知识点
==集合框架图(要求掌握基础接口和子接口及其各个实现类的特点) ==各种集合的源码解读及特有方法了解每种集合的特点及应用场景?ArrayList和LinkedList的异同点?a.相同点:继承关系:List接口下的实现类具有List提供的方法有序性:数据都是插入有序重复性:元素是可以重复的null值:可以存储null值安全性:都是非线程安全的集合(都可能会出...原创 2019-04-03 20:53:37 · 443 阅读 · 0 评论 -
PriorityQueue(优先级队列)源码分析及常用方法解析
一、PriorityQueue详解特点:不能为null元素可以重复可以又粗打印(每次只打印堆顶)常用方法:add() 添加元素——不能添加null元素,否则抛空指针异常offer() 添加元素 ——不能添加null元素,否则抛空指针异常peek() 获取队列顶部元素——仅仅获取,没有删除element()获取堆顶元素——队列为空抛异常NoSuchElementExcepti...原创 2019-03-08 13:37:29 · 687 阅读 · 0 评论 -
集合框架中——自定义优先级队列priorityQueue(小根堆)
优先级队列:优先级队列以数组形式存储数据,以树形形式组织元素的。在以树形形式组织的时候,默认为小根堆形式。小根堆:每一个父节点都小于它的左右节点。在树中:已知子节点,求父节点的公式为:(n-1)/2已知父节点:①求左孩子:2n+1②求右孩子:2n+2思路:自定义一个类,属性为存放元素的数组和存放元素的下标,添加元素添加元素时,往树的最后一个添加,然后在从下往上将整个...原创 2019-03-08 12:44:01 · 802 阅读 · 0 评论 -
集合中并发异常ConcurrentModificationException的产生原因(fail-fast 事件)
并发异常ConcurrentModificationException首先要了解什么是并发异常?(从源码的角度分析查看)怎样才能产生并发异常?找出解决办法一、什么是并发异常?从字面意思来看: 同时发生的修改异常Concurrent——同时发生的,并存的Modification——修正,改正,变更Exception——异常JDK源码解读:上面一大串英文解释为:(来...原创 2019-03-08 12:04:58 · 988 阅读 · 0 评论 -
Iterator、ListIterator迭代器源码分析
一、迭代器迭代器是一种设计模式,提供了一种方法来对集合、容器进行遍历的方式。不需要关注底层的数据结构和数据类型,来达到底层和上层的遍历解耦的目的。迭代器提供了三种方法,对集合进行遍历: 1. boolean hasNext(); 判断集合是否还有元素,有则返回ture,没有返回false。 2. E next(); 返回下一个元素,返回当前元素的数据类型, ...原创 2019-03-08 10:37:21 · 233 阅读 · 0 评论 -
利用ArrayList常用方法实现两个数组的交集、并集和差集
举例分析:两个数组a和b分别为 {1,2,3,4} {3,4,5,6}交集:两个数组的相同元素{3,4}并集:两个数组中所有的元素(包括重复的){1,2,3,4,3,4,5,6}差集:两个数组中不想同的元素,例:a与b的差集{1,2}、b与a的差集{5,6}此时用ArrayList的哪个方法来实现最为简单,是首要思考的问题。交集是判断两个数组相同的元素,可以用ArrayLis...原创 2019-03-07 17:22:13 · 2582 阅读 · 0 评论 -
LinkedList源码详解(常用方法源码分析)及 手动实现LinkedList
一、LinkedList详解特点:元素可以重复元素可以为null数据插入有序常用方法介绍:JDK1.8源码分析:原创 2019-03-07 16:48:18 · 268 阅读 · 0 评论 -
ArrayList源码详解(常用方法源码分析)及 手动实现ArrayList
一、ArrayList详解ArrayList是一个动态可变的数组。特点:元素可以重复元素可以为null数据插入有序常用方法介绍: int size(); //集合中存储元素的个数 boolean isEmpty(); // 判断集合是否为空 ,返回false:不为空。返回true:为空 boolean contains...原创 2019-03-03 17:56:30 · 203 阅读 · 0 评论 -
Java集合框架
Java平台集合框架一、集合集合(也称为容器)广泛用于存储、获取和处理一组紧密相关的数据,从JDK1.2版本开始,Java类库的java.util包提供了一个全新的集合框架。(如图)虚线作用的为接口,实现作用的均为实现类例如:collection为Iterator的子接口。集合框架包含三个部分:Interface:接口,定义表示各种集合的抽象数据类型Implementations:...原创 2019-03-03 14:14:04 · 133 阅读 · 0 评论